如何自动关闭Java服务器?

时间:2012-01-20 11:44:43

标签: java timer client-server session-timeout

我需要一种方法来自动关闭使用某种计时器运行的服务器程序。直到现在这就是我得到的

    long start = System.currentTimeMillis();
    long end = start + 10 * 1000; // 60 seconds * 1000 ms/sec

    while (System.currentTimeMillis() < end) {
        Socket connectionSocket = welcomeSocket.accept();
        BufferedReader inFromClient = new BufferedReader(
                new InputStreamReader(connectionSocket.getInputStream()));
        DataOutputStream outToClient = new DataOutputStream(
                connectionSocket.getOutputStream());
        clientSentence = inFromClient.readLine();
        System.out.println("Received: " + clientSentence);
        capitalizedSentence = clientSentence.toUpperCase() + '\n';
        outToClient.writeBytes(capitalizedSentence);
        count = count + 1;

    }
    welcomeSocket.close();

这可能吗?请帮助,不要投票。我有点像Java中的客户端服务器。

3 个答案:

答案 0 :(得分:1)

运行Thread中的代码(下面代码中的命名服务器),然后启动另一个这样的线程,当你想要退出时执行中断:

Thread server = {the one you have};
Thread timeout = new Thread() {
    public void run() {
        long end = start + 10 * 1000;
        try {
            Thread.sleep(end);
        } catch (InterruptedException e) {
            //handle this
        }
        server.interrupt();
    }
}
timeout.start();

socket.accept现在将抛出InterruptedException并绕过所有其他代码。

答案 1 :(得分:1)

您可以使用setSoTimeout

通常情况下,你会设置一些像100毫秒的值,输入一个循环并调用accept。当抛出超时异常时,你会检查它是否可以退出,然后退出循环或继续运行。

然后确保在完成后清理插座。

答案 2 :(得分:0)

我不确定你对Threads是否合适。仍然建议你看看Timer课程。

您可以创建一个Timer,它创建了一个关闭服务器的线程。您可以使用final variable建立连接,然后使用synchronised访问权限,在Timer线程启动后关闭它。