定时器和数据采集器java
我正在客户端和服务器之间实现一个回调函数 客户机向服务器注册自身,当事件发生时,服务器将向客户机发送datagrampacket以通知客户机事件 客户端将在用户指定的整个侦听期间被阻止 当它被阻止时,它将进入这个循环,继续监听服务器的回调定时器和数据采集器java,java,udp,Java,Udp,我正在客户端和服务器之间实现一个回调函数 客户机向服务器注册自身,当事件发生时,服务器将向客户机发送datagrampacket以通知客户机事件 客户端将在用户指定的整个侦听期间被阻止 当它被阻止时,它将进入这个循环,继续监听服务器的回调 while (waiting) { aSocket.setSoTimeout(0); aSocket.receive(reply); String replyString = new String(reply.getData()).tr
while (waiting) {
aSocket.setSoTimeout(0);
aSocket.receive(reply);
String replyString = new String(reply.getData()).trim();
System.out.println(replyString);
buffer = new byte[1000];
reply = new DatagramPacket(buffer, buffer.length);
}
我用一个timertask编码了一个计时器,它在监听周期结束后将等待值从true更改为false
我的问题是,我希望客户在收听期结束后停止收听。但是,即使我使用计时器,客户端也会在
aSocket.receive(reply);
这里有人知道如何跳过此代码并退出循环吗
非常感谢。来自
超时必须大于0。超时为零被解释为
无限超时
因此,当您将0用于
设置超时()
时,它只会阻塞receive()。这是因为如果我设置超时,例如5000ms,如果服务器以5001ms发送消息,客户端将引发timeoutexception而不是侦听消息。是的,您必须设置适当的超时并处理timeoutexception
,由于receive()
的阻塞性质。如果您熟悉JavaNIO,有一些非阻塞选项。我将尝试您的方法。对于JavaNIO不是很确定。别以为我的老师会让我们走那条路。