Rumah  >  Artikel  >  Java  >  Bagaimana untuk melaksanakan komunikasi berbilang benang dalam pengaturcaraan rangkaian Java?

Bagaimana untuk melaksanakan komunikasi berbilang benang dalam pengaturcaraan rangkaian Java?

王林
王林asal
2024-04-15 22:03:02305semak imbas

Komunikasi berbilang benang dalam pengaturcaraan rangkaian Java membolehkan berbilang pelanggan atau pelayan menyambung ke aplikasi yang sama secara serentak, meningkatkan kecekapan dan bertindak balas kepada permintaan. Melaksanakan komunikasi berbilang benang memerlukan penggunaan kelas ServerSocket dan Socket dengan mencipta objek ServerSocket untuk mendengar sambungan masuk dan mencipta benang berasingan untuk setiap sambungan untuk memproses data, seperti menerima dan menghantar respons. Sebagai contoh, dalam kes sebenar, pelayan gema akan mengembalikan mesej yang diterima kepada pelanggan sebagaimana adanya, menunjukkan aplikasi komunikasi berbilang benang dalam pengaturcaraan rangkaian.

Bagaimana untuk melaksanakan komunikasi berbilang benang dalam pengaturcaraan rangkaian Java?

Komunikasi Berbilang Benang dalam Pengaturcaraan Rangkaian Java

Dalam Pengaturcaraan Rangkaian Java, komunikasi berbilang benang membolehkan berbilang pelanggan atau pelayan menyambung ke aplikasi yang sama secara serentak, dengan itu meningkatkan kecekapan dan bertindak balas kepada lebih banyak permintaan.

Melaksanakan komunikasi berbilang benang

Untuk melaksanakan komunikasi berbilang benang, anda boleh menggunakan kelas ServerSocket dan Socket: ServerSocketSocket 类:

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

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

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

    1. Buat objek ServerSocket untuk mendengar sambungan masuk:
    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();
        }
      }
  4. Buat urutan berasingan untuk mengendalikan setiap sambungan masuk:

    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();
          }
        }
      }
    }

  5. Dalam Kelas ClientHandler , kendalikan data yang diterima daripada soket dan hantar respons:

    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();
      }
    }

    Kes praktikal: pelayan gema

    Ini adalah contoh mudah pelayan gema yang akan mengembalikan sebarang mesej yang diterimanya kepada Pelanggan:

    🎜Server 🎜🎜rrreee🎜🎜Pelanggan🎜🎜rrreee

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan komunikasi berbilang benang dalam pengaturcaraan rangkaian Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn