Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
定时器和数据采集器java_Java_Udp - Fatal编程技术网

定时器和数据采集器java

定时器和数据采集器java,java,udp,Java,Udp,我正在客户端和服务器之间实现一个回调函数 客户机向服务器注册自身,当事件发生时,服务器将向客户机发送datagrampacket以通知客户机事件 客户端将在用户指定的整个侦听期间被阻止 当它被阻止时,它将进入这个循环,继续监听服务器的回调 while (waiting) { aSocket.setSoTimeout(0); aSocket.receive(reply); String replyString = new String(reply.getData()).tr

我正在客户端和服务器之间实现一个回调函数

客户机向服务器注册自身,当事件发生时,服务器将向客户机发送datagrampacket以通知客户机事件

客户端将在用户指定的整个侦听期间被阻止

当它被阻止时,它将进入这个循环,继续监听服务器的回调

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不是很确定。别以为我的老师会让我们走那条路。