0

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

提前致谢。

4

2 回答 2

0

DatagramSocket#receive()状态的 javadoc

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

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

于 2013-09-30T01:11:25.110 回答
0

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

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

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

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

于 2013-09-30T01:12:05.757 回答