You are on page 1of 14

Cmo: cree un socket

.NET Framework 4.5 Otras versiones Antes de poder utilizar un socket para comunicarse con dispositivos remotos, el socket se debe inicializar con informacin de protocolo y direccin de red. El constructor para la clase de Socket tiene parmetros que especifican la familia de la direccin, el tipo de socket, y el tipo de protocolo que el socket utiliza para hacer las conexiones. Ejemplo El ejemplo siguiente crea un socket que se puede utilizar para comunicar en una red de TCP/IP-based, como internet. C#VB Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); Para utilizar UDP en lugar de TCP, cambie el tipo de protocolo, como en el ejemplo siguiente: C#VB Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); La enumeracin de AddressFamily especifica familias estndar de direccin utilizadas por la clase de Socket para resolver direcciones de red (por ejemplo, el miembro de AddressFamily.InterNetwork especifica la familia de la direccin de la versin 4 de IP). La enumeracin de SocketType especifica el tipo de socket (por ejemplo, el miembro de SocketType.Stream indica un socket estndar para enviar y recibir datos con el control de flujo). La enumeracin de ProtocolType especifica el protocolo de red para utilizar cuando se comunica en Socket (por ejemplo, ProtocolType.Tcp indica que el socket utiliza TCP; ProtocolType.Udp indica que el socket utiliza UDP). Despus de crear Socket , puede iniciar una conexin a un extremo remoto o recibir conexiones de dispositivos remotos.

Buenas a todos en este tutorial voy a tratar de explicar las nociones bsicas sobre sockets, ejemplos bsicos, teora, etc. Todo esto adquirido por practicas/errores propios jaja, Lo malo es que soy novato en esto, as que si ven errores o males usos no duden en corregirme, As que empecemos!!

Los sockets sirven para la comunicacin entre programas (en una primera medida), y para comenzar a dialogar debemos crear dicho Socket.

1-Agregamos los siguientes Namespaces

1 System.Net; 2 System.Net.Sockets; 2-Una vez agregados, procedemos a crearlos de la siguiente manera:

1 Socket nombre_de_socket = new Socket(AddressFamily, SocketType, ProtocolType); Socket -> Nombre de la clase nombre_de_socket -> El nombre que quieras ponerle AddressFamily -> Indica el servicio de direcciones que el socket debe usar SocketType ->Especifica el tipo de socket

ProtocolType -> Indica el tipo de protocolo a usar

Nosotros por el momento lo usaremos as:

1 Socket miPrimerSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp); 3-Luego necesitamos una direccion ip y un puerto para realizar la coneccin, para ello contamos con una clase llamada IPEndPoint

1 IPEndPoint direccion = new IPEndPoint(IPAddress.Parse(ip),puerto); ip -> Se pone entre comillas, por ejemplo, 192.168.0.1 puerto -> Se pone directamente (sin comillas), por ejemplo, 1234

Nos quedaria as

1 IPEndPoint direccion = new IPEndPoint(IPAddress.Parse("192.168.0.1"),1234); 4-Listo ahora crearemos un servidor, por el momento sera con aplicaciones de consola

Realizamos los 3 primeros items, y ahora tendremos que asociar el socket con la direccion, usando el metodo Bind

1 miPrimerSocket.Bind(direccion); 2

//cabe destacar que la direccion es la propia del servidor Luego lo debemos poner a la escucha con el metodo Listen

1 miPrimerSocket.Listen(numero) 2 // numero -> es la longitud maxima de la cola de conecciones, por el momento pondremos 1 5-Ahora debemos Crear un segundo Socket para comenzar a interactuar

1 Socket OtroNombre = miPrimerSocket.Accept(); 2 // Ac debemos usar el anterior Socket Listo una vez echo esto, la aplicacin queda suspendida hasta que el cliente se conecta. Esto se debe a que es un Servidor Sincrnico.

Hay dos modos: sincrnicos y asincrnicos, el primero ya est explicado y el segundo caso no queda suspendido. Pero por el momento seguiremos con el sincrnico, ya que es ms fcil de enterder.

6-Ahora crearemos un cliente

Realizamos los 3 primeros pasos, pero en la direccin debemos poner la del servidor, y el mismo puerto

7-Conectaremos el socket

miPrimerSocket.Connect(direccion); Y listo, ahora las aplicaciones estarn conectadas. Obviamente con esto solamente no sirve de nada, pero en los prximos tutoriales veremos como pasar texto, fotos, archivos, etc.

Algo a tener en cuenta ahora es que primero debe ejecutarse el servidor, pero solo por ahora, ms adelante, como dije antes, se ir acomplejando y haciendo ms tiles los ejemplos! Y por si alguno no entendi que hacen estas dos aplicaciones, les digo que solo se conectan y nada ms. Es solo una introduccin.

Muchas Gracias y les dejo los codigos:

Servidor

01 using System; 02 using System.Collections.Generic; 03 using System.Linq; 04 using System.Text; 05 using System.Threading.Tasks; 06 using System.Net; 07 using System.Net.Sockets; // Paso 1 // Paso 1

08

09 namespace Servidor 10 { 11 class Program 12 { 13 static void Main(string[] args) 14 { 15 Conectar(); //Llamar a funcin Conectar, es ajeno al tema 16 } 17 public static void Conectar() 18 { 19 Socket miPrimerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 20

// paso 2 - creamos el socket 21 IPEndPoint miDireccion = new IPEndPoint(IPAddress.Any, 1234); 22 //paso 3 -IPAddress.Any significa que va a escuchar al cliente en toda la red 23 try 24 { 25 // paso 4 26 miPrimerSocket.Bind(miDireccion); // Asociamos el socket a miDireccion 27 miPrimerSocket.Listen(1); // Lo ponemos a escucha 28

29 Console.WriteLine("Escuchando..."); 30 Socket Escuchar = miPrimerSocket.Accept(); 31 //creamos el nuevo socket, para comenzar a trabajar con l 32 //La aplicacin queda en reposo hasta que el socket se conecte a el cliente

33 //Una vez conectado, la aplicacin sigue su camino 34 Console.WriteLine("Conectado con exito"); 35

36 /*Aca ponemos todo lo que queramos hacer con el socket, osea antes de 37 cerrarlo je*/ 38 miPrimerSocket.Close(); //Luego lo cerramos 39

40 } 41 catch (Exception error) 42 { 43 Console.WriteLine("Error: {0}", error.ToString()); 44 } 45

Console.WriteLine("Presione cualquier tecla para terminar"); 46 Console.ReadLine(); 47

48 } 49 } 50 } cliente

view source 01 using System; 02 using System.Collections.Generic; 03 using System.Linq; 04 using System.Text; 05 using System.Threading.Tasks; 06

using System.Net; 07

// Paso 1

using System.Net.Sockets; // Paso 1 08

09 namespace Cliente 10 { 11 class Program 12 { 13 static void Main(string[] args) 14 { 15 Conectar(); 16 } 17 public static void Conectar() 18 {

19 Socket miPrimerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 20 // paso 2 - creamos el socket 21 IPEndPoint miDireccion = new IPEndPoint(IPAddress.Parse("192.168.0.11"), 1234); 22 //paso 3 - Ac debemos poner la Ip del servidor, y el puerto de escucha del servidor 23 //Yo puse esa porque corr las dos aplicaciones en la misma pc 24 try 25 { 26 miPrimerSocket.Connect(miDireccion); // Conectamos 27 Console.WriteLine("Conectado con exito"); 28 miPrimerSocket.Close(); 29 } 30 catch (Exception error) 31

{ 32 Console.WriteLine("Error: {0}",error.ToString()); 33 } 34 Console.WriteLine("Presione cualquier tecla para terminar"); 35 Console.ReadLine(); 36 } 37 } 38 }

You might also like