Programmation de sockets Java – Exemple de serveur et client de socket

Bienvenue dans l’exemple de programmation des sockets Java. Chaque serveur est un programme qui s’exécute sur un système spécifique et écoute sur un port spécifique. Les sockets sont liés aux numéros de port et lorsqu’un serveur est en cours d’exécution, il écoute simplement sur le socket et attend les demandes des clients. Par exemple, le serveur Tomcat fonctionnant sur le port 8080 attend les demandes des clients et une fois qu’il reçoit une demande de client, il y répond.

Programmation des Sockets Java

Un socket est une extrémité d’un lien de communication bidirectionnelle entre deux programmes s’exécutant sur le réseau. Le socket est lié à un numéro de port afin que la couche TCP puisse identifier l’application à laquelle les données doivent être envoyées. Dans cet exemple de tutoriel de programmation des sockets Java, nous apprendrons comment écrire un serveur de sockets Java et un client de sockets Java. Nous apprendrons également comment le programme serveur-client lit et écrit des données sur le socket. java.net.Socket et java.net.ServerSocket sont les classes Java qui implémentent Socket et Socket server.

Exemple de serveur de sockets 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 statique
    private static ServerSocket server;
    //port du serveur socket sur lequel il écoutera
    private static int port = 9876;
    
    public static void main(String args[]) throws IOException, ClassNotFoundException{
        //créer l'objet serveur socket
        server = new ServerSocket(port);
        //écoute indéfiniment jusqu'à ce qu'il reçoive l'appel 'exit' ou que le programme se termine
        while(true){
            System.out.println("Waiting for the client request");
            //création de la socket et attente de la connexion du client
            Socket socket = server.accept();
            //lire depuis la socket vers l'objet ObjectInputStream
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            //convertir l'objet ObjectInputStream en chaîne (String)
            String message = (String) ois.readObject();
            System.out.println("Message Received: " + message);
            //créer l'objet ObjectOutputStream
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            //écrire l'objet vers la socket
            oos.writeObject("Hi Client "+message);
            //fermer les ressources
            ois.close();
            oos.close();
            socket.close();
            //terminer le serveur si le client envoie une demande de sortie (exit)
            if(message.equalsIgnoreCase("exit")) break;
        }
        System.out.println("Shutting down Socket server!!");
        //fermer l'objet ServerSocket
        server.close();
    }
    
}

Client Socket 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{
        //obtenir l'adresse IP locale, si le serveur s'exécute sur une autre IP, vous devez utiliser cette IP
        InetAddress host = InetAddress.getLocalHost();
        Socket socket = null;
        ObjectOutputStream oos = null;
        ObjectInputStream ois = null;
        for(int i=0; i<5;i++){
            //établir la connexion à la socket du serveur
            socket = new Socket(host.getHostName(), 9876);
            //écrire dans la socket en utilisant ObjectOutputStream
            oos = new ObjectOutputStream(socket.getOutputStream());
            System.out.println("Sending request to Socket Server");
            if(i==4)oos.writeObject("exit");
            else oos.writeObject(""+i);
            //lire le message de réponse du serveur
            ois = new ObjectInputStream(socket.getInputStream());
            String message = (String) ois.readObject();
            System.out.println("Message: " + message);
            //fermer les ressources
            ois.close();
            oos.close();
            Thread.sleep(100);
        }
    }
}

Pour tester la programmation des sockets Java pour la communication entre le serveur et le client, nous devons d’abord exécuter la classe SocketServerExample. Lorsque vous exécutez le serveur de sockets, il affichera simplement « En attente de la demande du client » et attendra la demande du client. Maintenant, lorsque vous exécutez la classe SocketClientExample, elle enverra une demande au serveur de sockets Java et affichera le message de réponse dans la console. Voici la sortie du programme SocketServerExample du serveur de sockets 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!!

Voici la sortie du programme client de 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

C’est tout pour un bref aperçu de la programmation des sockets en Java. J’espère que vous pourrez commencer avec la programmation du serveur et du client de sockets Java. Référence : Documentation Oracle

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