Timer和DatagramSockets java

时间:2013-03-26 15:22:37

标签: java udp

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

客户端向服务器注册自己,当事件发生时,服务器将向客户端发送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);

有没有人知道如何跳过此代码并退出循环?

非常感谢。

1 个答案:

答案 0 :(得分:1)

来自javadoc

  

超时必须是> 0.超时为零被解释为   无限超时。

因此,当您为setSoTimeout()使用0时,它只会阻塞receive()。