Programmazione Socket Java – Esempio di server socket e client

Benvenuti nell’esempio di programmazione di socket Java. Ogni server è un programma che viene eseguito su un sistema specifico e resta in ascolto su una porta specifica. I socket sono associati ai numeri di porta e quando viene eseguito un server, resta in ascolto sul socket e attende le richieste dei client. Ad esempio, il server Tomcat in esecuzione sulla porta 8080 attende le richieste dei client e una volta ricevuta una qualsiasi richiesta, risponde ad essa.

Programmazione dei socket Java

Un socket è un’estremità di un collegamento bidirezionale di comunicazione tra due programmi in esecuzione sulla rete. Il socket è associato a un numero di porta in modo che il livello TCP possa identificare l’applicazione a cui i dati sono destinati. Nell’esempio di tutorial di programmazione dei socket Java, impareremo come scrivere un server socket Java e un programma client socket Java. Impareremo anche come il programma server-client legge e scrive dati sul socket. java.net.Socket e java.net.ServerSocket sono le classi Java che implementano Socket e Socket server.

Esempio di server socket 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 {
    
    //variabile statica ServerSocket
    private static ServerSocket server;
    //porta del server socket su cui ascolterà
    private static int port = 9876;
    
    public static void main(String args[]) throws IOException, ClassNotFoundException{
        //creare l'oggetto del server socket
        server = new ServerSocket(port);
        //continua ad ascoltare indefinitamente finché non riceve la chiamata 'exit' o il programma termina
        while(true){
            System.out.println("Waiting for the client request");
            //creazione del socket e attesa della connessione del client
            Socket socket = server.accept();
            //leggere dal socket nell'oggetto ObjectInputStream
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            //convertire l'oggetto ObjectInputStream in Stringa
            String message = (String) ois.readObject();
            System.out.println("Message Received: " + message);
            //creare l'oggetto ObjectOutputStream
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            //scrivere l'oggetto nel Socket
            oos.writeObject("Hi Client "+message);
            //chiudere le risorse
            ois.close();
            oos.close();
            socket.close();
            //terminare il server se il client invia la richiesta di uscita
            if(message.equalsIgnoreCase("exit")) break;
        }
        System.out.println("Shutting down Socket server!!");
        //chiudere l'oggetto ServerSocket
        server.close();
    }
    
}

Java Socket Client

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{
        //ottenere l'indirizzo IP localhost, se il server è in esecuzione su un altro IP, è necessario utilizzare quello
        InetAddress host = InetAddress.getLocalHost();
        Socket socket = null;
        ObjectOutputStream oos = null;
        ObjectInputStream ois = null;
        for(int i=0; i<5;i++){
            //stabilire la connessione del socket al server
            socket = new Socket(host.getHostName(), 9876);
            //scrivere nel socket utilizzando ObjectOutputStream
            oos = new ObjectOutputStream(socket.getOutputStream());
            System.out.println("Sending request to Socket Server");
            if(i==4)oos.writeObject("exit");
            else oos.writeObject(""+i);
            //leggere il messaggio di risposta del server
            ois = new ObjectInputStream(socket.getInputStream());
            String message = (String) ois.readObject();
            System.out.println("Message: " + message);
            //chiudere le risorse
            ois.close();
            oos.close();
            Thread.sleep(100);
        }
    }
}

Per testare la programmazione socket Java della comunicazione server-client, prima dobbiamo eseguire la classe SocketServerExample. Quando eseguirai il server socket, stamperà solo “In attesa della richiesta del client” e poi aspetterà la richiesta del client. Ora, quando eseguirai la classe SocketClientExample, invierà una richiesta al server socket Java e stamperà il messaggio di risposta sulla console. Ecco l’output del programma socket server Java SocketServerExample.

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!!

Ecco l’output del programma client socket 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

Questo è tutto per un breve riepilogo della programmazione socket in Java. Spero che tu possa iniziare con il server socket Java e la programmazione client socket Java. Riferimento: Oracle Doc

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