如何知道数据报包是否已发送到客户端

时间:2013-09-30 01:04:16

标签: java network-programming udp

我正在尝试在进程之间建立UDP网络,在这些进程中,它们不断共享消息。我需要知道某个进程是否有待接收的消息。如果没有,当我调用DatagramSocket.receive()函数时会发生什么?程序是否会停止等待消息,否则它将忽略此功能? 我不知道我是否足够清楚,或者甚至在正确的方向思考,所以任何提示都会有所帮助。

提前致谢。

2 个答案:

答案 0 :(得分:0)

DatagramSocket#receive()州的javadoc

  

此方法将一直阻塞,直到收到数据报。

换句话说,您当前的线程会停止执行。当底层套接字收到数据报时,它会收到通知。

答案 1 :(得分:0)

以下内容来自oracle API(http://docs.oracle.com/javase/7/docs/api/java/net/DatagramSocket.html#receive(java.net.DatagramPacket)

从此套接字接收数据报包。当此方法返回时,DatagramPacket的缓冲区将填充接收的数据。数据报包还包含发送方的IP地址和发送方机器上的端口号。

此方法将一直阻止,直到收到数据报为止。数据报包对象的长度字段包含接收消息的长度。如果消息长于数据包的长度,则消息将被截断。

如果有安全管理器,如果安全管理器的checkAccept方法不允许,则无法接收数据包。