作者eliang ()
看板java
标题[问题] ServerSocket.accept() 要怎麽强制结束?
时间Fri Jun 2 12:57:30 2006
Hi,
假设我要写一个允许 multi-client 的 server,
一般应该会把程式分成至少三条 thread:
1. 服务单一 client 的 thread
2. 等待 client 连线的 thread
3. Main thread, 处理 UI
我希望使用者在 UI 里输入 'exit' 时就结束整个程式 (结束所有 thread),
所以我写了这样的程式 (以下程式码只是大概写出来的, 不能编译):
// 服务单一 client
class ServeOneClient extends Thread {
Socket sock;
public ServeOneClient(Socket s) {
sock = s;
}
public void run() {
// 这里放服务 client 的程式码.....
}
}
// 等待 client 的连线, 等到後就丢给 ServeOneClient 处理,
// 然後自己再继续等待 client
class ServerListener extends Thread {
volatile boolean stopped = false;
ServerSocket ss = new ServerSocket(1234);
public void run() {
while (true) {
Socket s = ss.accept();
(new ServeOneClient(s)).start();
if (stopped)
break;
}
}
}
// Main thread, 处理 UI
class Main {
public static void main(String[] args) {
ServerListener listener = new ServerListener();
listener.start();
while (true) {
// ........
// 其他处理 UI 的程式码...
// ......
if (使用者输入 'exit' 指令) {
listener.stopped = true;
listener.join();
break;
}
}
}
}
问题是 ServerListener 这条 thread 里的 ServerSocket.accept()
会一直 hang 在那里, 直到有 client 连进来才回传,
导致无法马上执行到之後的 if (stopped) 那行程式码,
请问我要怎麽写, 才能让 main 去结束 ServerListener? (除了用 System.exit(0))
谢谢!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.133.199
※ 编辑: eliang 来自: 220.132.133.199 (06/02 13:02)