Java网络阻塞方法和while循环

问题描述 投票:0回答:2

我现在为我的游戏制作了一个简单的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()是否为真并退出。因此,在我关闭游戏后,我希望这个线程立即死亡而不再接收数据包,但我不知道该怎么做!感谢帮助

java multithreading sockets networking while-loop
2个回答
2
投票

有几种选择。首先,最简单的选择是设置超时:https://docs.oracle.com/javase/7/docs/api/java/net/DatagramSocket.html#setSoTimeout(int)

接下来,另一个选择是使用回调和异步I / O.看看java.nio.channels.DatagramChannel


1
投票

回答here。类似于你的DatagramSocket.receive的情况

© www.soinside.com 2019 - 2024. All rights reserved.