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

Java 如何知道数据报数据包是否已发送到客户端,java,network-programming,udp,Java,Network Programming,Udp,我正在尝试在进程之间建立UDP网络,它们在其中不断共享消息。我需要知道是否有消息等待某个进程接收。如果没有,调用DatagramSocket.receive()函数时会发生什么?程序会停止等待消息还是忽略此功能? 我不知道我是否足够清楚,甚至思考的方向是否正确,所以任何提示都会有所帮助 提前感谢。各州的javadoc 此方法会一直阻塞,直到收到数据报为止 换句话说,当前线程停止执行。当底层套接字接收到数据报时,它将收到通知。下面是来自oracle API() 从该套接字接收数据报数据包。当此方法

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

提前感谢。

各州的javadoc

此方法会一直阻塞,直到收到数据报为止


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

下面是来自oracle API()

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

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


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

感谢您的回复。因此,除了阻止进程外,无法检查消息是否挂起。嗯,我想我将不得不切换到TCP,尽管在我的应用程序中,我不在乎消息是否丢失。@WALEDLUTFI使用TCP,您将在套接字输入流
read()
上被阻塞。@WALEDLUTFI有什么原因不能在非阻塞模式下使用
java.nio.channels.DatagramChannel
?这就是异步读/写UDP套接字的方式。@Dev您的意思是“非阻塞”。异步I/O是另一个复杂的问题。