Maison > Java > javaDidacticiel > le corps du texte

Comment effectuer une communication multithread dans la programmation réseau Java ?

王林
Libérer: 2024-04-15 22:03:02
original
296 Les gens l'ont consulté

La communication multithread dans la programmation réseau Java permet à plusieurs clients ou serveurs de se connecter simultanément à la même application, améliorant ainsi l'efficacité et répondant aux demandes. La mise en œuvre d'une communication multithread nécessite l'utilisation de classes ServerSocket et Socket en créant des objets ServerSocket pour écouter les connexions entrantes et en créant des threads distincts pour chaque connexion afin de traiter les données, telles que la réception et l'envoi de réponses. Par exemple, dans le cas réel, le serveur d'écho renverra le message reçu au client tel quel, démontrant l'application de la communication multithread dans la programmation réseau.

Comment effectuer une communication multithread dans la programmation réseau Java ?

Communication multithread dans la programmation réseau Java

Dans la programmation réseau Java, la communication multithread permet à plusieurs clients ou serveurs de se connecter simultanément à la même application, augmentant ainsi l'efficacité et répondant à plus de demandes.

Implémentation d'une communication multithread

Pour implémenter une communication multithread, vous pouvez utiliser les classes ServerSocket et Socket : ServerSocketSocket 类:

  1. 创建一个 ServerSocket 对象以监听传入的连接:

    ServerSocket serverSocket = new ServerSocket(port);
    Copier après la connexion
  2. 创建一个单独的线程来处理每个传入的连接:

    while (true) {
      Socket socket = serverSocket.accept();
      Runnable task = new ClientHandler(socket);  // ClientHandler 为处理连接的自定义类
      new Thread(task).start();
    }
    Copier après la connexion
  3. ClientHandler

    1. Create un objet ServerSocket pour écouter les connexions entrantes :
    2. class ClientHandler implements Runnable {
      
        private Socket socket;
      
        public ClientHandler(Socket socket) {
       this.socket = socket;
        }
      
        @Override
        public void run() {
       // 从套接字接收数据
       BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
       String request = in.readLine();
      
       // 准备并发送响应
       String response = "HTTP/1.1 200 OK\n";
       socket.getOutputStream().write(response.getBytes());
      
       // 关闭套接字
       socket.close();
        }
      }
      Copier après la connexion
  4. Créez un fil de discussion séparé pour gérer chaque connexion entrante :

    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class EchoServer {
    
      public static void main(String[] args) throws Exception {
        // 监听端口 8080 的传入连接
        ServerSocket serverSocket = new ServerSocket(8080);
    
        while (true) {
          // 接受传入的连接
          Socket socket = serverSocket.accept();
    
          // 处理连接的线程
          Runnable task = new ClientHandler(socket);
          new Thread(task).start();
        }
      }
    
      private static class ClientHandler implements Runnable {
    
        private Socket socket;
    
        public ClientHandler(Socket socket) {
          this.socket = socket;
        }
    
        @Override
        public void run() {
          try {
            // 从客户端接收消息
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String message = in.readLine();
    
            // 将消息原样返回给客户端
            socket.getOutputStream().write((message + "\n").getBytes());
    
            // 关闭连接
            socket.close();
          } catch (Exception e) {
            e.printStackTrace();
          }
        }
      }
    }
    Copier après la connexion
  5. Dans la classe ClientHandler , gérez les données reçues du socket et envoyez la réponse :

    import java.net.Socket;
    
    public class EchoClient {
    
      public static void main(String[] args) throws Exception {
        // 连接到回声服务器的 8080 端口
        Socket socket = new Socket("localhost", 8080);
    
        // 向服务器发送消息
        socket.getOutputStream().write("Hello world!\n".getBytes());
    
        // 从服务器接收响应
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String response = in.readLine();
    
        // 打印服务器的响应
        System.out.println("Server response: " + response);
    
        // 关闭连接
        socket.close();
      }
    }
    Copier après la connexion

    Cas pratique : serveur d'écho

    Il s'agit d'un exemple simple de serveur d'écho qui renverra tout message qu'il reçoit au Client :

    🎜Serveur 🎜🎜rrreee🎜🎜Client🎜🎜rrreee

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!