我有以下代码块:
public void startListening() throws Exception {
serverSocket = new DatagramSocket(port);
new Thread() {
@Override
public void run() {
System.out.print("Started Listening");
byte[] receiveData = new byte[1024];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
while (!stopFlag) {
try {
serverSocket.receive(receivePacket);
String message = new String(receivePacket.getData());
System.out.println("RECEIVED: " + message);
} catch (Exception ex) {
System.out.print("Execption :" + ex.getMessage());
}
}
}
}.start();
}
public void stopListening() {
this.stopFlag = true;
}
假设我将stopFlag设置为true。 serverSocket.receive(receivePacket);
将等待收到数据包。如果我想在stopFlag设置为true后立即退出线程,我该怎么办。
答案 0 :(得分:6)
我也遇到了套接字问题,而interrupt()也没有用。我的问题通过关闭套接字解决了。所以在setStop()方法中(如上所述)你必须调用serverSocket.close()
(你显然必须使serverSocket成为类成员或其他东西)。
答案 1 :(得分:2)
我不确定停止标志来自哪里,但无论如何,答案是中断。
Thread t;
ServerSoket serverSoket;
public void startListening() throws Exception {
...
serverSocket = new DatagramSocket(port);
t = new Thread()...;
t.start();
...
}
setStop() {
stopFlag = true;
serverSocket.close()
t.interrupt();
}
答案 2 :(得分:2)
如果您有一些代码包含您计划更改stopFlag
的代码,那将会有所帮助。如果它在线程之外,你可以在线程上使用.interrupt()
,然后在线程上使用.destroy()
。这可能是尝试在服务器套接字上添加超时的更好的解决方案,请参阅java api中setSoTimeout()
的{{1}}方法。
答案 3 :(得分:0)
使用serverSocket.setSoTimeout(t)
。