Java ネットワーク プログラミングのマルチスレッド通信により、複数のクライアントまたはサーバーが同じアプリケーションに同時に接続できるため、効率が向上し、リクエストに応答できます。マルチスレッド通信を実装するには、ServerSocket オブジェクトを作成して受信接続をリッスンし、接続ごとに個別のスレッドを作成して応答の送受信などのデータを処理することで、ServerSocket および Socket クラスを使用する必要があります。たとえば、実際のケースでは、エコー サーバーは受信したメッセージをそのままクライアントに返します。これは、ネットワーク プログラミングにおけるマルチスレッド通信の応用を示しています。
#Java ネットワーク プログラミングにおけるマルチスレッド通信
Java ネットワーク プログラミングでは、マルチスレッド通信により複数のクライアントまたはサーバーの接続が可能になります。同じアプリケーションに同時にアクセスできるため、効率が向上し、より多くのリクエストに応答できます。マルチスレッド通信の実現
マルチスレッド通信を実現するには、ServerSocket クラスと
Socket クラスを使用できます。 :
ServerSocket オブジェクトを作成します:
ServerSocket serverSocket = new ServerSocket(port);
while (true) { Socket socket = serverSocket.accept(); Runnable task = new ClientHandler(socket); // ClientHandler 为处理连接的自定义类 new Thread(task).start(); }
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 サイトの他の関連記事を参照してください。