UDP(User Datagram Protocol) En Visual Studio

Programación En .NET Add comments

 

  Buenas, en este post hare un pequeño ejemplo de la comunicacion sin conexion usando el protocoloo UDP por el cual puedo enviar datagramas en la red sin necesidad de haber establecido una conexion al contrario de el otro protocolo TCP.

¿Que puertos utilizamos?

Desde Wikipedia podemos obtener esto:

Puertos

UDP utiliza puertos para permitir la comunicación entre aplicaciones. El campo de puerto tiene una longitud de 16 bits, por lo que el rango de valores válidos va de 0 a 65.535. El puerto 0 está reservado, pero es un valor permitido como puerto origen si el proceso emisor no espera recibir mensajes como respuesta.

Los puertos 1 a 1023 se llaman puertos "bien conocidos" y en sistemas operativos tipo Unix enlazar con uno de estos puertos requiere acceso como superusuario.

Los puertos 1024 a 49.151 son puertos registrados.

Los puertos 49.152 a 65.535 son puertos efímeros y son utilizados como puertos temporales, sobre todo por los clientes al comunicarse con los servidores.

¿Como hacer la conexion por medio del protocolo UDP?

Bueno suponiendo que han leido ya sobre UDP y datagramas y sockets en general empezare con el codigo, debido a intereses personales volvere a usar c# en este ejemplo, aunque como la mayoria saben no hay un cambio significativo de comprension para que lo pasen a Visual Basic.

Lo primero que haremos es crear una nueva solucion con el nombre que crean conveniente, luego agregar un proyecto de libreria de clases donde ira el siguiente codigo:

using System;
using System.Collections.Generic;
using System.Text;
using System.Net.NetworkInformation; //Necesaria para usar el NetworkInterface
 
using System.Net.Sockets; //Necesaria para usar el UDPClient, AddressFamily
 
using System.Net; //Necesaria para usar el IPEndPoint,IPAddress
 
namespace libDatagramas
{
public class clsPaquetes
{
 
//Declarando Variables
private string _MensajeTexto;
 
byte[] Mensaje = new byte[1024]; 
 
private NetworkInterface[] ni = NetworkInterface.GetAllNetworkInterfaces(); 
 
System.Net.Sockets.UdpClient Cliente = new System.Net.Sockets.UdpClient(11000,AddressFamily.InterNetwork); 
 
 
//Propiedad para obtener el mensaje que envia 
 
 
public string MensajeTexto
{
get { return _MensajeTexto; }
set { _MensajeTexto = value; }
} 
 
//Este void sirve para enviar paquetes por medio de datagramas 
 
public void MensajeParaEnviar()
{ 
 
//Obtengo los bytes debido a que el envio de paquetes por medio de datagrama es en bytes
 
Mensaje = Encoding.ASCII.GetBytes(_MensajeTexto); 
 
//Establesco los puertos
 
System.Net.IPEndPoint ipEndPoint = new System.Net.IPEndPoint(ni[0].GetIPProperties().UnicastAddresses[0].Address, 11000); 
 
 
//Envio el paquete por medio de datagramas
Cliente.Send(Mensaje, Mensaje.Length, ipEndPoint); 
 
} 
 
//Por medio de este void obtengo el paquete que he enviado anteriormente por medio de datagramas
 
public string ObtenerMensaje()
{ 
 
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 11000);
Mensaje = Cliente.Receive(ref sender); 
 
 
//Obtengo el string debido a que el envio de paquetes por medio de datagrama es en bytes
 
string MensajeFinal = Encoding.ASCII.GetString(Mensaje); 
 
 
//Retorno el mensaje obtenido
 
return MensajeFinal.ToString();
 
}
 
}
 
}

 

Bueno en el ultimo corchete termina la clase necesaria, ustedes pueden compilarla y utilizar el binario como una referencia para aplicarla en cualquier programa.

Bueno la interfaz es lo ultimo, y lo inico que se necesita seria 1 listbox donde aparece el mensaje recibido y un cuadro de texto donde se escribe el mensaje a enviar ademas de un boton para enviar el mensaje y uno para recibir.

El proposito de este ejemplo es aprender es por eso que todo esta en una sola pantalla, hay varias formas de recibir los mensajes sin necesidad de presionar el boton.

Lo que haremos es a la solucion anterior agregar un nuevo proyecto, y en este caso utilizaremos un proyecto de aplicacion windows.

1- Hacer la referencia a la libreria de clases creada anteriormente o si ya la compilaron a una DLL.

2- Escribir el codigo siguiente(con su nombre de proyecto, libreria etc…)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms; 
 
namespace WinAppliDatagramas
{
public partial class frmDatagramas : Form
{
public frmDatagramas()
{
InitializeComponent();
}
 
//Instancia de la la clase paquetes
libDatagramas.clsPaquetes DataGramas = new libDatagramas.clsPaquetes(); 
 
//Boton para comprobar si hay algun mensaje 
private void btnRecibirMensajes_Click(object
sender, EventArgs e)
{
string MensajeObtenido;
MensajeObtenido = DataGramas.ObtenerMensaje(); 
 
this.lstMensajesObtenidos.Items.Add(MensajeObtenido);
} 
 
//Boton para enviar mensajes
private void btnEnviarMensaje_Click(object sender, EventArgs e)
{
 
//Envio el mensaje que hay en el textbox
DataGramas.MensajeTexto = this.txtMensajeParaEnviar.Text; 
 
DataGramas.MensajeParaEnviar(); 
 
txtMensajeParaEnviar.Text = "" 
 
}
 
}
 
}
 

 

Bueno eso es todo, si quieren descargar el proyecto que esta escrito en c# lo pueden hacer desde el area de descargas.

Artículos Relacionados:

5 Responses to “UDP(User Datagram Protocol) En Visual Studio”

  1. Edward Says:

    Hola .. muy bueno el proyecto

    pero no lo encuentro en la zona de descargas :S

    me podiras decir si es q lo sacaste o es solo q lo tengo q buscar mejor ? :P

    gracias

    Usando Mozilla Firefox Mozilla Firefox 3.0.3 en Windows Windows Vista
  2. Benjamín Zepeda Says:

    Disculpa, es que cuando me cambie de host hubo problemas… en la noche lo buscare y lo pondré. :D

    Usando Internet Explorer Internet Explorer 7.0 en Windows Windows Vista
  3. Graciela Says:

    Hola Benjamín, oye me podrías decir en donde esta el área de descargas??.

    Gracias.. =)

    Usando Internet Explorer Internet Explorer 7.0 en Windows Windows XP
  4. Benjamín Zepeda Says:

    Les pido disculpas, aun no encuentro el archivo. :(

    Usando Internet Explorer Internet Explorer 7.0 en Windows Windows Vista
  5. Benjamín Zepeda Says:

    Graciela lamentablemente cuando me cambie a wordpress perdi la zona de descargas :(

    Usando Internet Explorer Internet Explorer 7.0 en Windows Windows Vista

Deja Un Comentario


WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Log in