Java ServerSocket多次连接到同一个套接字

时间:2014-03-28 18:36:38

标签: java sockets serversocket

所以,我不确定这里的问题是什么,但我正在尝试用Java创建一个简单的服务器,但每当客户端连接时(我一直通过来自谷歌Chrome的本地主机请求连接)一个客户端连接将连接多次。 (即每次我通过浏览器连接到我的服务器时,服务器都会打印“用户连接成功”2-5次。)我不确定主线程如何可能会回到循环的顶部并连接到同一个客户不止一次。

...
ServerSocket ss = new ServerSocket(9876);
while(true)
{
   Socket s = ss.accept();
   if(count >= queuesize || count >= numproducers)
   {
     System.out.println("Thread pool has reached it's limit. User access denied.");
     //....
     //error message sent to user here
     //....
   }
   else
   {
      System.out.println("User connected successfully");
      for(int x=0;x<numproducers;x++)
      {
         if(threads.get(position).isAvailable())
         {
             threads.get(x).start(s);
             position = (position+1) % numproducers;
             break;
         }
         position = (position+1) % numproducers;
      }
   }
}

2 个答案:

答案 0 :(得分:0)

这是一种解决方法。它可能会对你有帮助。

  • 从下方的服务器创建包含所有已连接Set的所有哈希码的MapSocket

    Socket s = ss.accept();
    
  • 现在每当新客户端尝试连接时都会检查,如果它是相同的Socket,则不执行任何操作或关闭套接字。

答案 1 :(得分:0)

  

我不确定主线程如何可以回到循环顶部并多次连接到同一个客户端。

好:

  • 你有一个接受循环,它回答了部分内容,
  • 没有什么可以阻止浏览器与您形成多个连接

所以它发生了。

浏览器经常这样做以加载嵌入的资源,例如图像,样式表,JavaScript等。