2015-10-17 58 views
0

我正在创建一个简单的http服务器。我有一个主线程,等待循环中的连接被接受。一旦连接被接受,我创建一个新的工作线程来处理连接,将接受的套接字作为参数传递。一旦连接被接受,就为它创建一个新的线程,然而主线程将再次循环,用相同的连接创建另一个套接字并创建另一个重复的线程。SocketServer保持接受相同的连接。为同一连接创建多个线程

主线程正在等待连接。

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创建重复的工作线程。

谢谢

+2

用套接字API创建完全重复的连接是不太可能的。你确定你没有围绕'connect'调用客户端?用'netstat'检查连接源端口号。 –

回答

0

你所描述的是不可能的。

毫无疑问,某些地方应该有一些静态变量,它们应该是Worker,的实例成员,例如输入和/或输出流和/或套接字本身。