【发布时间】:2015-10-17 19:57:34
【问题描述】:
我正在创建一个简单的 http 服务器。我有一个主线程循环等待连接被接受。一旦连接被接受,我创建一个新的工作线程来处理连接,将接受的套接字作为参数传递。一旦连接被接受,就会为其创建一个新线程,但是主线程将再次循环,创建另一个具有相同连接的套接字并创建另一个重复线程。
主线程等待连接。
public void run(){
while(Tester.serverStatus != "quit"){
try {
Socket clientSocket = serverSocket.accept();
new Thread(new Worker(clientSocket)).start();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
this.stop();
} catch (IOException e) {
e.printStackTrace();
}
return;
}
public void stop() throws IOException{
serverSocket.close();
return;
}
工作线程伪代码
public void run(){
InputStream input = clientSocket.getInputStream();
//read from stream, validate request and setup the response in a byte array
input.close();
DataOutputStream output = new DataOutputStream(clientSocket.getOutputStream());
output.write(responseByteArray);
output.flush();
output.close();
clientSocket.close();
return;
}
关于为什么在接受第一个连接后没有阻止 accept() 方法的任何想法?它只是继续使用相同的 Socket 创建重复的 Worker 线程。
谢谢
【问题讨论】:
-
实际上不可能使用套接字 API 创建完全重复的连接。您确定您没有围绕
connect呼叫在客户端上旋转吗?使用netstat检查连接源端口号。
标签: java multithreading sockets