Professional Documents
Culture Documents
.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 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
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.
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.
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
36 /*Aca ponemos todo lo que queramos hacer con el socket, osea antes de 37 cerrarlo je*/ 38 miPrimerSocket.Close(); //Luego lo cerramos 39
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
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