Buenas a todos en este “tutorial” voy a tratar de explicar las nociones básicas sobre sockets, ejemplos básicos, teoría, 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 comunicación entre programas (en una primera medida), y para comenzar a “dialogar” debemos crear dicho Socket.
1-Agregamos los siguientes Namespaces
System.Net; System.Net.Sockets;
2-Una vez agregados, procedemos a crearlos de la siguiente manera:
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í:
Socket miPrimerSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
3-Luego necesitamos una direccion ip y un puerto para realizar la conección, para ello contamos con una clase llamada IPEndPoint
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í
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
miPrimerSocket.Bind(direccion); //cabe destacar que la direccion es la propia del servidor
Luego lo debemos poner a la escucha con el metodo Listen
miPrimerSocket.Listen(numero) // 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
Socket OtroNombre = miPrimerSocket.Accept(); // Acá debemos usar el anterior Socket
Listo una vez echo esto, la aplicación queda suspendida hasta que el cliente se conecta. Esto se debe a que es un Servidor Sincrónico.
Hay dos modos: sincrónicos y asincrónicos, el primero ya está explicado y el segundo caso no queda suspendido. Pero por el momento seguiremos con el sincrónico, ya que es más fácil de enterder.
6-Ahora crearemos un cliente
Realizamos los 3 primeros pasos, pero en la dirección debemos poner la del servidor, y el mismo puerto
7-Conectaremos el socket
miPrimerSocket.Connect(direccion);
Y listo, ahora las aplicaciones estarán conectadas. Obviamente con esto solamente no sirve de nada, pero en los próximos 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, más adelante, como dije antes, se irá acomplejando y haciendo más útiles los ejemplos!
Y por si alguno no entendió que hacen estas dos aplicaciones, les digo que solo se conectan y nada más. Es solo una introducción.
Muchas Gracias y les dejo los codigos:
Servidor
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net; // Paso 1 using System.Net.Sockets; // Paso 1 namespace Servidor { class Program { static void Main(string[] args) { Conectar(); //Llamar a función Conectar, es ajeno al tema } public static void Conectar() { Socket miPrimerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // paso 2 - creamos el socket IPEndPoint miDireccion = new IPEndPoint(IPAddress.Any, 1234); //paso 3 -IPAddress.Any significa que va a escuchar al cliente en toda la red try { // paso 4 miPrimerSocket.Bind(miDireccion); // Asociamos el socket a miDireccion miPrimerSocket.Listen(1); // Lo ponemos a escucha Console.WriteLine("Escuchando..."); Socket Escuchar = miPrimerSocket.Accept(); //creamos el nuevo socket, para comenzar a trabajar con él //La aplicación queda en reposo hasta que el socket se conecte a el cliente //Una vez conectado, la aplicación sigue su camino Console.WriteLine("Conectado con exito"); /*Aca ponemos todo lo que queramos hacer con el socket, osea antes de cerrarlo je*/ miPrimerSocket.Close(); //Luego lo cerramos } catch (Exception error) { Console.WriteLine("Error: {0}", error.ToString()); } Console.WriteLine("Presione cualquier tecla para terminar"); Console.ReadLine(); } } }
cliente
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net; // Paso 1 using System.Net.Sockets; // Paso 1 namespace Cliente { class Program { static void Main(string[] args) { Conectar(); } public static void Conectar() { Socket miPrimerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // paso 2 - creamos el socket IPEndPoint miDireccion = new IPEndPoint(IPAddress.Parse("192.168.0.11"), 1234); //paso 3 - Acá debemos poner la Ip del servidor, y el puerto de escucha del servidor //Yo puse esa porque corrí las dos aplicaciones en la misma pc try { miPrimerSocket.Connect(miDireccion); // Conectamos Console.WriteLine("Conectado con exito"); miPrimerSocket.Close(); } catch (Exception error) { Console.WriteLine("Error: {0}",error.ToString()); } Console.WriteLine("Presione cualquier tecla para terminar"); Console.ReadLine(); } } }