socket = new DatagramSocket(port);
while (isListen) {
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, 0, data.length);
socket.receive(packet);
}
receive()方法将在收到数据包之前永远等待.是否有可能停止等待接收?我可以设置一个布尔值isListen来停止循环.另一方面,如果套接字正在等待,那么如果没有从客户端发送数据包,它将永远等待.
解决方法:
您可以从另一个线程关闭套接字.然后在receive()中阻塞的线程将抛出IOException.
while (isListen) {
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, 0, data.length);
try {
socket.receive(packet);
} catch(IOException e) {
continue;
}
}
void stopListening() { // Call me from some other thread
isListen = false;
socket.close();
}
标签:java,sockets,network-programming,udp
来源: https://codeday.me/bug/20190927/1824759.html