Programación de sockets en Java: una breve guía

Publicado: 2022-05-21

En Java, la programación de sockets es un medio para comunicarse entre programas y mantenerse conectado a diferentes JRE, tanto servidores orientados a la conexión como servidores no orientados a la conexión. Un socket de servidor Java se utiliza exclusivamente para iniciar y procesar la comunicación entre un servidor y un cliente.

Este blog cubrirá todo lo que hay que saber sobre la programación de sockets.

Tabla de contenido

Programación de sockets en Java

La programación de sockets es el proceso de complementar y usar nodos de red separados de manera interactiva. Es un sistema de comunicación bidireccional en el que un socket (nodo) escucha en un puerto específico en una dirección IP mientras el otro socket se conecta.

Enchufes en Java

En Java, los sockets son un extremo de un canal de comunicación bidireccional que conecta dos programas en red. La capa TCP se usa para asignar un número de puerto al socket Java dado para identificar la aplicación a la que estamos transfiriendo datos. Usamos la combinación de una dirección IP y un número de puerto para crear un punto final.

La plataforma Java incluye una clase llamada Socket, que implementa un lado de una conexión de red bidireccional entre su aplicación Java y otro programa. La clase se asienta sobre una implementación independiente de la plataforma, protegiendo su programa Java de los detalles específicos del sistema.

Al usar la clase en lugar de cierto código nativo, sus programas Java pueden comunicarse a través de la red de manera independiente a la plataforma.

Además, java.net incluye la clase ServerSocket, que implementa un socket que los servidores pueden usar para escuchar y aceptar conexiones de clientes. Este es un ejemplo que muestra cómo usar las clases ServerSocket y Socket.

Entre el puerto del lado del cliente y el puerto del lado del servidor, se crea una conexión.

Establecimiento de una conexión de socket Java [LADO DEL CLIENTE]

Antes de continuar con la programación del lado del cliente, el cliente debe esperar el inicio del servidor. Una vez que esté en funcionamiento, comenzará a enviar consultas al servidor Java. El cliente entonces esperará la respuesta del servidor. Este es un buen resumen de la lógica de conexión cliente-servidor.

Veamos la programación del lado del cliente con más detalle.

Para conectarse a otra máquina, necesitará una conexión de enchufe. Las dos computadoras deben saber dónde están en la red (dirección IP) y qué puerto TCP están utilizando para establecer una conexión de socket. El marco java.net denota la clase de socket.

La dirección IP del servidor es el primer argumento de entrada. El puerto TCP es el siguiente parámetro aquí. (No es más que un número que indica qué programa debe iniciarse en un servidor). HTTP, por ejemplo, usa el puerto 80. Por lo general, el rango de los números de puerto se encuentra entre 0 y 65535.

Comunicación

Los flujos se utilizan para la entrada y salida de datos cuando se comunican a través de una conexión de socket. Una vez que haya enviado las solicitudes y establecido una conexión sólida, debe cerrar la conexión del socket.

Cerrar una conexión de socket de servidor Java

La conexión de socket se cierra explícitamente después de enviar el mensaje al servidor, la conexión de socket se cierra explícitamente.

// Demostración del programa Java para Clientele

importar java.net.*;

importar java.io.*;

clase pública Client_Side_Program

{

// para inicializar flujos de socket, flujos de entrada y flujos de salida

socket privado socket = nulo;

entrada privada de DataInputStream = nulo;

privado DataOutputStream fuera = nulo;

// constructor para poner el puerto TCP y la dirección IP

Cliente público (cadena agregada, puerto int)

{

// establecer una conexión

probar

{

socket = nuevo Socket (agregar, puerto);

System.out.println(“Conectado”);

// toma la entrada de la terminal

entrada = new DataInputStream(System.in);

// envía la salida al socket

salida = new DataOutputStream(socket.getOutputStream());

}

catch(UnknownHostException u)

{

Sistema.out.println(u);

}

catch(IOException i)

{

Sistema.out.println(i);

}

// cadena para leer el mensaje de entrada

Línea de cadena = “”;

// sigue leyendo hasta que se ingrese "Over"

while (!line.equals(“Sobre”))

{

probar

{

línea = entrada.readLine();

out.writeUTF(línea);

}

catch(IOException i)

{

Sistema.out.println(i);

}

}

// cerrar la conexion

probar

{

entrada.cerrar();

fuera.cerrar();

enchufe.cerrar();

}

catch(IOException i)

{

Sistema.out.println(i);

}

}

public static void main(String args[])

{

Cliente cliente = nuevo Cliente ("127.0.0.1", 5000);

}

}

Para visitar la fuente de este código, haga clic aquí .

Establecimiento de una conexión de socket Java [LADO DEL SERVIDOR]

El servidor crea su objeto y espera la solicitud del cliente mientras considera la conexión del lado del socket del servidor Java. El servidor interactuará con el cliente una vez que se haya enviado la solicitud. Necesitará dos sockets para codificar la aplicación del lado del servidor, que es la siguiente: cuando un cliente crea un nuevo Socket(), se crea un ServerSocket para esperar las solicitudes del cliente. Un socket simple se puede definir como un programa que inicia la comunicación del lado del servidor con el cliente. Puede comunicar las respuestas con el cliente en consecuencia, una vez que obtenga el informe de la conexión de socket del lado del servidor Java.

Comunicación

Para usar el socket para enviar la salida, generalmente esperamos usar el método getOutputStream().

Cerrar una conexión de socket de servidor Java

Es crucial finalizar la conexión apagando tanto el enchufe como los flujos de entrada y salida.

// Un programa java del Servidor

importar java.net.*;

importar java.io.*;

Servidor de clase pública

{

//inicializar socket y flujo de entrada

socket privado socket = nulo;

Servidor ServerSocket privado = nulo;

privado DataInputStream en = nulo;

// constructor con puerto

servidor público (puerto int)

{

// espera una conexión después de iniciar un servidor

probar

{

servidor = nuevo ServerSocket(puerto);

System.out.println(“Servidor: iniciado”);

System.out.println(“Esperando la llegada de un cliente…”);

socket = servidor.aceptar();

System.out.println(“El cliente ha sido aceptado”);

// para tomar la entrada del socket del cliente

en = nuevo flujo de entrada de datos (

nuevo BufferedInputStream(socket.getInputStream()));

Línea de cadena = “”;

// para leer el mensaje del cliente hasta que se envíe "Over"

while (!line.equals(“Sobre”))

{

probar

{

línea = en.readUTF();

System.out.println(línea);

}

catch(IOException i)

{

Sistema.out.println(i);

}

}

System.out.println(“Cerrando conexión”);

// conexión cercana

enchufe.cerrar();

cercar();

}

catch(IOException i)

{

Sistema.out.println(i);

}

}

public static void main(String args[])

{

servidor servidor = nuevo servidor (5000);

}

}

Para consultar los detalles de este código, haga clic aquí .

Puede ejecutar el software del lado del servidor primero después de configurar los extremos del cliente y del servidor. Luego, debe ejecutar el software del lado del cliente y enviar la solicitud. El servidor reaccionará inmediatamente cuando la solicitud provenga del extremo del cliente.

Explore nuestros cursos populares de ingeniería de software

SL. No Programas de desarrollo de software
1 Maestría en Ciencias en Ciencias de la Computación de LJMU & IIITB Programa de Certificado de Ciberseguridad Caltech CTME
2 Bootcamp de desarrollo de pila completa Programa PG en Blockchain
3 Programa Ejecutivo de Postgrado en Desarrollo de Software - Especialización en DevOps Ver todos los cursos de ingeniería de software

Terminal o símbolo del sistema en ejecución

Para iniciar la Terminal o el Símbolo del sistema, haremos uso de los siguientes comandos. Para empezar, crearemos dos ventanas, una estará dedicada al servidor y la otra al cliente.

  1. Deje que el programa Servidor comience a ejecutarse.

$ servidor Java

  1. Luego, en una terminal diferente, inicie la aplicación Cliente como,

cliente java $

El software mostrará "Conectado" y "Cliente aceptado" a medida que el servidor acepta al cliente.

  1. En el cuadro Cliente, puede comenzar a ingresar mensajes. Este es un ejemplo de una entrada de cliente.

¡Hola! Esto marca mi primera conexión de enchufe profesional.

Que el servidor obtiene y muestra al mismo tiempo

¡Hola! Esto marca mi primera conexión de enchufe profesional.

Sobre.

Conexión de cierre

Como se indicó anteriormente, el envío de "Over" finaliza la conexión entre el Cliente y el Servidor.

Lea nuestros artículos populares relacionados con el desarrollo de software

¿Cómo implementar la abstracción de datos en Java? ¿Qué es la clase interna en Java? Identificadores de Java: definición, sintaxis y ejemplos
Comprender la encapsulación en OOPS con ejemplos Argumentos de línea de comando en C explicados Las 10 funciones y características principales de la computación en la nube en 2022
Polimorfismo en Java: conceptos, tipos, características y ejemplos ¿Paquetes en Java y cómo usarlos? Tutorial de Git para principiantes: Aprende Git desde cero

Conclusión

La programación de Java Socket es una herramienta esencial que procede mediante el uso de API de socket para establecer la comunicación entre aplicaciones cliente-servidor locales y remotas. El conocimiento adecuado de la programación de sockets puede mejorar las conexiones de ida y vuelta entre el servidor y el cliente.

Si está buscando aprender Java y dominar el desarrollo full-stack, tenemos el curso de alto impacto para usted: Programa PG Ejecutivo en Desarrollo de Software de upGrad - Especialización en Desarrollo Full Stack .

El programa de 13 meses de IIIT-B está diseñado para ayudar a los estudiantes a adquirir habilidades tales como Fundamentos de Ciencias de la Computación, Procesos de Desarrollo de Software, API de Back-end e Interfaz de Usuario Web Interactiva. Obtiene acceso a un campo de entrenamiento de transición de carrera de software tanto para codificadores nuevos como no tecnológicos para perfeccionar sus habilidades de programación y soporte profesional de 360 ​​° de upGrad.

Aprenda cursos de desarrollo de software en línea de las mejores universidades del mundo. Obtenga Programas PG Ejecutivos, Programas de Certificado Avanzado o Programas de Maestría para acelerar su carrera.

¿Cuáles son los beneficios de aprender programación de sockets Java?

Los sockets pueden usarse para construir una aplicación cliente-servidor, como un chat, desde el punto de vista de la red. Los sockets se implementan en el nivel más básico de seguridad para descubrir si los puertos de un sistema están abiertos, si existen programas estándar de exploración de puertos como Nmap y si se pueden utilizar a un nivel bajo. Se pueden usar de la misma manera que SSH: el comando Secure Socket Shell se puede usar para conectarse a un servidor externo a través de un shell inverso.

¿Qué hace la función de aceptar?

La función de aceptación espera a que un cliente se conecte al servidor bloqueando su permanencia allí hasta que llegue un argumento. Luego usamos la función getInputStream para obtener la entrada del socket. El servidor está diseñado de manera que continúa aceptando mensajes enviados hasta que se recibe el comando Over.

¿Por qué se utilizan subprocesos en la programación de redes?

Queremos que se unan varios clientes al mismo tiempo. Por lo tanto, debemos emplear subprocesos en el lado del servidor para que un subproceso diferente pueda manejar cada solicitud del cliente. Supongamos una situación en la que dos solicitudes llegan al servidor simultáneamente. Como no se proporciona ningún método para procesar varias solicitudes simultáneamente en nuestra sencilla aplicación servidor-cliente, la solicitud que llegue incluso un nanosegundo antes podrá conectarse al servidor, mientras que la otra solicitud será rechazada.