ホームページ > Java > &#&チュートリアル > Java ネットワーク プログラミングでマルチスレッド通信を実行するにはどうすればよいですか?

Java ネットワーク プログラミングでマルチスレッド通信を実行するにはどうすればよいですか?

王林
リリース: 2024-04-15 22:03:02
オリジナル
366 人が閲覧しました

Java ネットワーク プログラミングのマルチスレッド通信により、複数のクライアントまたはサーバーが同じアプリケーションに同時に接続できるため、効率が向上し、リクエストに応答できます。マルチスレッド通信を実装するには、ServerSocket オブジェクトを作成して受信接続をリッスンし、接続ごとに個別のスレッドを作成して応答の送受信などのデータを処理することで、ServerSocket および Socket クラスを使用する必要があります。たとえば、実際のケースでは、エコー サーバーは受信したメッセージをそのままクライアントに返します。これは、ネットワーク プログラミングにおけるマルチスレッド通信の応用を示しています。

Java ネットワーク プログラミングでマルチスレッド通信を実行するにはどうすればよいですか?

#Java ネットワーク プログラミングにおけるマルチスレッド通信

Java ネットワーク プログラミングでは、マルチスレッド通信により複数のクライアントまたはサーバーの接続が可能になります。同じアプリケーションに同時にアクセスできるため、効率が向上し、より多くのリクエストに応答できます。

マルチスレッド通信の実現

マルチスレッド通信を実現するには、

ServerSocket クラスと Socket クラスを使用できます。 :

  1. 受信接続をリッスンする

    ServerSocket オブジェクトを作成します:

    ServerSocket serverSocket = new ServerSocket(port);
    ログイン後にコピー

  2. 各受信接続を処理する別のスレッドを作成しますconnection 接続:

    while (true) {
      Socket socket = serverSocket.accept();
      Runnable task = new ClientHandler(socket);  // ClientHandler 为处理连接的自定义类
      new Thread(task).start();
    }
    ログイン後にコピー

  3. ClientHandler クラスで、ソケットから受信したデータを処理し、応答を送信します:

    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();
      }
    }
    ログイン後にコピー

実践的なケース: エコー サーバー

これは、受信したメッセージを変更せずにクライアントに返すエコー サーバーの簡単な例です:

サーバー

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();
      }
    }
  }
}
ログイン後にコピー

クライアント

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();
  }
}
ログイン後にコピー

以上がJava ネットワーク プログラミングでマルチスレッド通信を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート