Recherche de site Web

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


Bienvenue dans l'exemple de programmation de socket 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 lorsque nous exécutons un serveur, il écoute simplement sur le socket et attend les requêtes des clients. Par exemple, le serveur Tomcat fonctionnant sur le port 8080 attend les requêtes des clients et une fois qu'il reçoit une requête de client, il y répond.

Programmation de sockets Java

Une socket est un point de terminaison d'un lien de communication bidirectionnel entre deux programmes s'exécutant sur le réseau. La socket est associée à un numéro de port afin que la couche TCP puisse identifier l'application à laquelle les données doivent être envoyées. Dans le tutoriel d'exemple de programmation de socket en Java, nous apprendrons comment écrire un serveur socket Java et un client socket Java. Nous apprendrons également comment le programme serveur-client lit et écrit des données sur la socket. java.net.Socket et java.net.ServerSocket sont les classes Java qui implémentent Socket et le serveur Socket.

Exemple de serveur Java Socket

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 {
    
    //static ServerSocket variable
    private static ServerSocket server;
    //socket server port on which it will listen
    private static int port = 9876;
    
    public static void main(String args[]) throws IOException, ClassNotFoundException{
        //create the socket server object
        server = new ServerSocket(port);
        //keep listens indefinitely until receives 'exit' call or program terminates
        while(true){
            System.out.println("Waiting for the client request");
            //creating socket and waiting for client connection
            Socket socket = server.accept();
            //read from socket to ObjectInputStream object
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            //convert ObjectInputStream object to String
            String message = (String) ois.readObject();
            System.out.println("Message Received: " + message);
            //create ObjectOutputStream object
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            //write object to Socket
            oos.writeObject("Hi Client "+message);
            //close resources
            ois.close();
            oos.close();
            socket.close();
            //terminate the server if client sends exit request
            if(message.equalsIgnoreCase("exit")) break;
        }
        System.out.println("Shutting down Socket server!!");
        //close the ServerSocket object
        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{
        //get the localhost IP address, if server is running on some other IP, you need to use that
        InetAddress host = InetAddress.getLocalHost();
        Socket socket = null;
        ObjectOutputStream oos = null;
        ObjectInputStream ois = null;
        for(int i=0; i<5;i++){
            //establish socket connection to server
            socket = new Socket(host.getHostName(), 9876);
            //write to socket using ObjectOutputStream
            oos = new ObjectOutputStream(socket.getOutputStream());
            System.out.println("Sending request to Socket Server");
            if(i==4)oos.writeObject("exit");
            else oos.writeObject(""+i);
            //read the server response message
            ois = new ObjectInputStream(socket.getInputStream());
            String message = (String) ois.readObject();
            System.out.println("Message: " + message);
            //close resources
            ois.close();
            oos.close();
            Thread.sleep(100);
        }
    }
}

Pour tester la programmation de sockets Java pour la communication serveur-client, nous devons d'abord exécuter la classe SocketServerExample. Lorsque vous exécuterez le serveur de sockets, il affichera simplement « Waiting for client request » puis attendra la requête du client. Maintenant, lorsque vous exécuterez la classe SocketClientExample, elle enverra une requête au serveur de sockets Java et affichera le message de réponse à la console. Voici la sortie du programme du serveur de sockets 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!!

Voici la sortie du programme client Java socket 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 rapide résumé de la programmation des sockets en Java. J’espère que vous pourrez commencer avec la programmation du serveur socket Java et du client socket Java. Référence : Documentation Oracle