多线程连接处理

Ada*_*der 0 java sockets multithreading

我想编写一个服务器,它在给定的端口上侦听连接并将套接字放入BlockingLinkedQueue消费者线程将从中读取消息.我以这种方式接受传入的连接:

   ServerSocket serverSocket = new ServerSocket(port);
   while (true)
   {
        Socket socket = null;
        socket = serverSocket.accept();
        queue.put(socket);
   }
Run Code Online (Sandbox Code Playgroud)

当我尝试从两个独立的主机并行连接时,会发生在建立第二个连接后,对第一个的响应被发送到第二个主机.当我将我的代码更改为下面列出的代码时,第二个连接仅被拒绝:

   while (true)
   {
        ServerSocket serverSocket = new ServerSocket(port);
        Socket socket = serverSocket.accept();
        queue.put(socket);
   }
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 这两种情况有什么区别?为什么在第一种情况下消息被发送到第二个主机?
  2. 我应该如何重构我的代码,以便在我的服务器和两台主机之间创建单独的连接并并行处理它们?

Pet*_*rey 5

这两种情况有什么区别?

在第一种情况下,您使用相同的端口进行多个连接.在第二种情况下,您将丢弃服务器端口,因此拒绝任何等待连接.

为什么在第一种情况下消息被发送到第二个主机?

由于代码中的错误,此处未显示.

我应该如何重构我的代码,以便在我的服务器和两台主机之间创建单独的连接并并行处理它们?

为每个连接创建一个线程.