我有一个线程,其任务是坐在DatagramSocket上,侦听传入的数据包,并将其放入队列中以进行进一步处理。它的运行方法是:
public void run() {
while(!disconnected) {
byte[] buffer1 = new byte[FrameSizeBytes];
DatagramPacket RxPacket = new DatagramPacket(buffer1,buffer1.length);
try {
RxSocket.receive(RxPacket);
} catch (IOException e) {
// handle exception
}
buffer1 = RxPacket.getData();
Q.add(buffer1);
}
}
我还有另一个线程,其任务是确定何时终止此线程。
通过将
disconnected
变量设置为true,然后关闭套接字来完成此操作。这个想法是,关闭套接字将使线程解除阻塞,成为一个异常。可以处理异常;一旦处理了异常,循环条件将导致循环退出。 (或者,
exception
处理本身可以将断开连接设置为true。)问题:在这种情况下抛出的异常是
SocketException: socket closed
,这很合理。但是DatagramSocket.receive()不会抛出SocketExceptions,因此我无法处理或抛出它。问题:有什么方法可以使这个想法生效,还是我需要寻找另一种方法? (注意:我不只是想在套接字上设置超时。对于这个应用程序,这不是一个好方法。)
最佳答案
设置标志,向自己发送一个虚拟数据包,然后关闭套接字。在receive()之后,在处理数据包之前检查标志,