SocketServer继续接受相同的连接。为同一连接创建多个线程

时间:2015-10-17 19:57:35

标签: java multithreading sockets

我正在创建一个简单的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线程。

由于

1 个答案:

答案 0 :(得分:0)

你所描述的是不可能的。 毫无疑问,某些静态变量应该是Worker的实例成员,例如输入和/或输出流,和/或套接字本身。