问题描述
||
在我的代码中(在下面),在线程处理现有连接并在serverSocket.accept()创建的套接字上调用close()之前,serverSocket将不接受新连接。如果我启动此服务器并在浏览器中打开两个选项卡,则只有一个选项卡连接,而另一个则等待,直到另一个选项卡完成(不是),然后serverSocket.accept()才能接受新连接。如何在不关闭前一个连接的情况下接受新连接?
public class ReboundServer {
static ServerSocket serverSocket;
public static boolean listening = true;
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
try {
serverSocket = new ServerSocket(4444);
System.out.println(\"Starting Server\");
} catch (IOException e) {
System.out.println(\"Could not listen on port: 4444\");
System.exit(-1);
}
while(listening)
{
(new Thread(new ClientThread(serverSocket.accept()))).start();
}
serverSocket.close();
}
}
public class ClientThread implements Runnable {
private Socket clientSocket = null;
public ClientThread(Socket socket)
{
this.clientSocket = socket;
}
public void run()
{
System.out.println(\"ClientConnected\");
MatchThread.QueueLock.lock();
MatchThread.connectionQueue.add(clientSocket);
MatchThread.QueueLock.unlock();
}
}
解决方法
显然问题不在这里,而是在您尚未发布其代码的MatchThread类中。看来您有一个处理该队列的线程。为什么?