1

所以,这就是我所拥有的。这是一个使用线程连接到多个客户端的服务器程序。到目前为止,该主循环几乎是无限的。假设客户端向 ServerThread 发送了关闭命令。那个 ServerThread 是否能够访问主类、跳出循环并到达程序的末尾?

我尝试将 isRunning = false 放入 ServerThread 中,但这似乎不起作用。

public class Server
{
    public static boolean isRunning = true; 

    public static void main(String[] args)
    {
        // init stuff

        try {
            serverSocket = new ServerSocket(27647);
        } catch (IOException e) {
            println("Could not listen on port 27647");
        }

        while(isRunning)
        {  
            Socket clientSocket = null;

            try{
                clientSocket = serverSocket.accept();
            } catch(IOException e) {
                println("Could not connect to client"); 
            }

            ServerThread serv = new ServerThread(clientSocket);
            serv.start();
        }

        try {
            serverSocket.close();
        } catch (IOException e1) { }
    }
}
4

1 回答 1

5

您需要使 isRunning 变得易失,并且您必须关闭 serverSocket 才能解除对接受线程的阻塞。我建议你有一个类似的方法

public void close() throws IOException {
    isRunning = false;
    serverSocket.close();
}

如果您从任何线程调用它,该线程将几乎立即停止。

于 2013-06-18T02:21:08.597 回答