¿Qué un Socket y como funciona?
Un socket es un punto final de una conexión de red. En Java, los sockets se utilizan para establecer una comunicación entre un cliente y un servidor a través de una red. Un socket se compone de una dirección IP y un número de puerto, que identifican de manera única el punto final de la conexión.
¿Cómo funciona un Socket?
Cuando un cliente quiere comunicarse con un servidor, crea un socket y se conecta a la dirección IP y el número de puerto del servidor. El servidor, por su parte, escucha en un puerto específico y acepta las conexiones entrantes de los clientes. Una vez que se establece la conexión, el cliente y el servidor pueden intercambiar datos a través del socket. El socket se encarga de manejar la comunicación entre el cliente y el servidor, permitiendo enviar y recibir datos de manera bidireccional. Esto significa que tanto el cliente como el servidor pueden enviar y recibir datos al mismo tiempo.
Ejemplo de un Socket en Java
Explicación del código
Servidor
ServerSocket: Se crea un
ServerSocketen el puerto especificado (12345) y se inicia a la espera de conexiones entrantes.Socket: Cuando un cliente se conecta, se acepta la conexión y se crea un
Socketpara manejar la comunicación con ese cliente.PrintWriter: Se crea un
PrintWriterpara enviar mensajes al cliente.Generación de números aleatorios: Se genera un número aleatorio entre 1 y 100 y se envía al cliente.
Delay: Se espera un segundo antes de enviar el siguiente número.
Manejo de excepciones: Se manejan las excepciones que pueden ocurrir durante la conexión y el envío de datos.
Cierre del socket: El socket se cierra automáticamente al salir del bloque
try-with-resources.Ciclo infinito: El servidor sigue escuchando conexiones entrantes y enviando números aleatorios hasta que se detiene manualmente.
Impresión de mensajes: Se imprimen mensajes en la consola para indicar el estado del servidor y los números enviados.
Cliente
Socket: Se crea un
Socketpara conectarse al servidor en la dirección IP y el puerto especificados.BufferedReader: Se crea un
BufferedReaderpara leer los mensajes enviados por el servidor.Lectura de mensajes: Se lee un mensaje del servidor y se imprime en la consola.
Manejo de excepciones: Se manejan las excepciones que pueden ocurrir durante la conexión y la lectura de datos.
Cierre del socket: El socket se cierra automáticamente al salir del bloque
try-with-resources.Ciclo infinito: El cliente sigue leyendo mensajes del servidor hasta que se cierra la conexión.
Impresión de mensajes: Se imprimen mensajes en la consola para indicar el estado del cliente y los números recibidos.
Conclusión
Los sockets son una herramienta poderosa para establecer comunicación entre aplicaciones en red. En este ejemplo, hemos visto cómo crear un servidor y un cliente en Java que se comunican a través de sockets. El servidor envía números aleatorios al cliente, que los recibe y los imprime en la consola. Este es un ejemplo básico, pero los sockets se pueden utilizar para crear aplicaciones más complejas, como servidores web, aplicaciones de chat y mucho más. Los sockets son una parte fundamental de la programación de redes y son ampliamente utilizados en aplicaciones distribuidas.