我现在为我的游戏制作了一个简单的UDP服务器/客户端系统。这是等待将数据发送给它的方法的代码:
while (handler.isRunning()) {
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
try {
socket.receive(packet);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Server - " + new String(data).trim());
}
socket.close();
所以,当游戏关闭意味着isRunning()被设置为false时,除了服务器和客户端之外,所有线程都会死亡。原因是因为这里,socket.receive()方法阻塞,它需要至少再接收一个数据包,然后检查isRunning()是否为真并退出。因此,在我关闭游戏后,我希望这个线程立即死亡而不再接收数据包,但我不知道该怎么做!感谢帮助
有几种选择。首先,最简单的选择是设置超时:https://docs.oracle.com/javase/7/docs/api/java/net/DatagramSocket.html#setSoTimeout(int)。
接下来,另一个选择是使用回调和异步I / O.看看java.nio.channels.DatagramChannel
回答here。类似于你的DatagramSocket.receive
的情况