我是网络初学者,正在努力在我的游戏中实现它,它大部分工作正常,但在客户端中,我的循环接收数据包正在停止 try catch 。这是代码:
public void run() {
while(true){
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
try {
socket.receive(packet);
}catch(IOException e){
e.printStackTrace();
}
this.parsePacket(packet.getData(), packet.getAddress(), packet.getPort());
}
}
调试后我发现循环没有通过 try catch 语句。(但 try 被激活一次,看起来没有错误)。
最佳答案
首先,您提供的循环条件不是变量
,您直接使用了 boolean 值true
。这可能是无限循环
的情况。
while(true){..... // yourCode ....}
即使 socket.receive(packet);
行引发 IOException
,循环也会继续,因为此异常由 catch()
处理> 阻止。
这意味着它将执行直到该行引发任何异常
this.parsePacket(packet.getData(), packet.getAddress(), packet.getPort());
现在,您的问题是这个方法 public void receive(DatagramPacket p)
实际上,该方法将一直工作,直到收到 datagram
,但您的循环将继续,直到引发异常,直到 this.parsePacket()
方法引发异常。
So, please change your conditional statement such that if
datagram
is no more present then loop must be terminated.
关于java - 虽然 Java 中的 try/catch 打破了 true 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36684322/