所以,我不确定这里的问题是什么,但我正在尝试用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;
}
}
}
答案 0 :(得分:0)
这是一种解决方法。它可能会对你有帮助。
从下方的服务器创建包含所有已连接Set
的所有哈希码的Map
或Socket
Socket s = ss.accept();
现在每当新客户端尝试连接时都会检查,如果它是相同的Socket
,则不执行任何操作或关闭套接字。
答案 1 :(得分:0)
我不确定主线程如何可以回到循环顶部并多次连接到同一个客户端。
好:
所以它发生了。
浏览器经常这样做以加载嵌入的资源,例如图像,样式表,JavaScript等。