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