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

   ServerSocket serverSocket = new ServerSocket(port);
   while (true)
   {
        Socket socket = null;
        socket = serverSocket.accept();
        queue.put(socket);
   }


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

   while (true)
   {
        ServerSocket serverSocket = new ServerSocket(port);
        Socket socket = serverSocket.accept();
        queue.put(socket);
   }


我的问题是:


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

最佳答案

这两种情况有什么区别?


在第一种情况下,您将同一端口用于多个连接。在第二种情况下,您将丢弃服务器端口,以便拒绝任何等待的连接。


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


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


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


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

关于java - 多线程连接处理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11213245/

10-11 22:49
查看更多