【问题标题】:Multithreaded connections handling多线程连接处理
【发布时间】:2012-06-27 02:03:26
【问题描述】:

我想编写一个服务器,它在给定端口上侦听连接并将套接字放入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);
   }

我的问题是:

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

【问题讨论】:

    标签: java multithreading sockets


    【解决方案1】:

    这两种情况有什么区别?

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      • 2018-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-09
      相关资源
      最近更新 更多