我需要一种方法来自动关闭使用某种计时器运行的服务器程序。直到现在这就是我得到的
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中的客户端服务器。
答案 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
线程启动后关闭它。