Programación de sockets en Java – Ejemplo de servidor y cliente de socket

Bienvenido al ejemplo de programación de sockets en Java. Cada servidor es un programa que se ejecuta en un sistema específico y escucha en un puerto específico. Los sockets están vinculados a los números de puerto y cuando ejecutamos un servidor, simplemente escucha en el socket y espera las solicitudes del cliente. Por ejemplo, el servidor Tomcat que se ejecuta en el puerto 8080 espera las solicitudes del cliente y, una vez que recibe alguna solicitud del cliente, responde a ellas.

Programación de Sockets en Java

Un socket es un extremo de un enlace de comunicación bidireccional entre dos programas que se ejecutan en la red. El socket está vinculado a un número de puerto para que la capa TCP pueda identificar la aplicación a la que se destina enviar datos. En el tutorial de ejemplo de programación de sockets en Java, aprenderemos cómo escribir un servidor de sockets en Java y un programa cliente de sockets en Java . También aprenderemos cómo el programa cliente y el servidor leen y escriben datos en el socket. java.net.Socket y java.net.ServerSocket son las clases de Java que implementan Socket y Socket server.

Ejemplo de Servidor de Sockets en Java

package com.journaldev.socket;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.ClassNotFoundException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * This class implements java Socket server
 * @author pankaj
 *
 */
public class SocketServerExample {
    
    //variable ServerSocket estático
    private static ServerSocket server;
    //puerto del servidor de sockets en el que escuchará
    private static int port = 9876;
    
    public static void main(String args[]) throws IOException, ClassNotFoundException{
        //crear el objeto del servidor de sockets
        server = new ServerSocket(port);
        //escuchar indefinidamente hasta recibir la llamada 'exit' o que el programa termine
        while(true){
            System.out.println("Waiting for the client request");
            //crear socket y esperar la conexión del cliente
            Socket socket = server.accept();
            //leer del socket al objeto ObjectInputStream
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            //convertir el objeto ObjectInputStream a String
            String message = (String) ois.readObject();
            System.out.println("Message Received: " + message);
            //crear el objeto ObjectOutputStream
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            //escribir objeto al Socket
            oos.writeObject("Hi Client "+message);
            //cerrar recursos
            ois.close();
            oos.close();
            socket.close();
            //terminar el servidor si el cliente envía la solicitud de salida
            if(message.equalsIgnoreCase("exit")) break;
        }
        System.out.println("Shutting down Socket server!!");
        //cerrar el objeto ServerSocket
        server.close();
    }
    
}

Cliente de Socket de Java

package com.journaldev.socket;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * This class implements java socket client
 * @author pankaj
 *
 */
public class SocketClientExample {

    public static void main(String[] args) throws UnknownHostException, IOException, ClassNotFoundException, InterruptedException{
        //obtener la dirección IP de localhost, si el servidor se está ejecutando en otra IP, debes usar esa
        InetAddress host = InetAddress.getLocalHost();
        Socket socket = null;
        ObjectOutputStream oos = null;
        ObjectInputStream ois = null;
        for(int i=0; i<5;i++){
            //establecer conexión de socket al servidor
            socket = new Socket(host.getHostName(), 9876);
            //escribir al socket usando ObjectOutputStream
            oos = new ObjectOutputStream(socket.getOutputStream());
            System.out.println("Sending request to Socket Server");
            if(i==4)oos.writeObject("exit");
            else oos.writeObject(""+i);
            //leer el mensaje de respuesta del servidor
            ois = new ObjectInputStream(socket.getInputStream());
            String message = (String) ois.readObject();
            System.out.println("Message: " + message);
            //cerrar recursos
            ois.close();
            oos.close();
            Thread.sleep(100);
        }
    }
}

Para probar la programación de sockets en Java para la comunicación servidor-cliente, primero necesitamos ejecutar la clase SocketServerExample. Cuando ejecute el servidor de sockets, simplemente imprimirá “Esperando solicitud del cliente” y luego esperará la solicitud del cliente. Ahora, al ejecutar la clase SocketClientExample, enviará una solicitud al servidor de sockets de Java e imprimirá el mensaje de respuesta en la consola. Aquí está la salida del programa SocketServerExample del servidor de sockets en Java.

Waiting for the client request
Message Received: 0
Waiting for the client request
Message Received: 1
Waiting for the client request
Message Received: 2
Waiting for the client request
Message Received: 3
Waiting for the client request
Message Received: exit
Shutting down Socket server!!

Aquí está la salida del programa cliente de sockets Java SocketClientExample.

Sending request to Socket Server
Message: Hi Client 0
Sending request to Socket Server
Message: Hi Client 1
Sending request to Socket Server
Message: Hi Client 2
Sending request to Socket Server
Message: Hi Client 3
Sending request to Socket Server
Message: Hi Client exit

Eso es todo para un breve resumen de la programación de sockets en Java. Espero que puedas comenzar con la programación de servidor de sockets en Java y cliente de sockets en Java. Referencia: Documento de Oracle

Source:
https://www.digitalocean.com/community/tutorials/java-socket-programming-server-client