2014-03-28 70 views
2

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

... 
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; 
     } 
    } 
} 
+1

使用远程登录表示是否发生,如果你让自己的客户端,还是? –

+0

您是否认为Chrome可能连接多次? (使用lsof检查,如果您在Linux上,则查看打开的连接。) – vanza

+0

请同时分享客户端代码。 – Braj

回答

0

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

  • 创建的SetMap包含哈希码全部以低于线

    Socket s = ss.accept(); 
    
  • 现在检查每个每当一个新的客户端试图连接时,连接从服务器Socket如果同一Socket然后不做任何事情或关闭套接字。

+0

我可能只是保持多个连接,因为我意识到它不会伤害任何东西,但如果我决定不这样做,那么这似乎是一个伟大的解。谢谢! (我想过这样的事情,但我没有考虑使用集合) – Sp4mm4ge

+0

它不可能是相同的'套接字'。它始终是一个新的套接字。答案没有意义,建议的解决方案是毫无意义的。 – EJP

0

我不知道怎么在主线程可能可能奔回到循环的顶部,并连接到同一个客户端不止一次。

好:

  • 你有一个接受循环,回答的那部分,并
  • 没有什么可形成多个连接到您
停止浏览器

所以它发生。

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