java - 如果我尝试通过 DatagramChannel 发送空 UDP 数据包但底层套接字缓冲区已满,会发生什么情况?

标签 java sockets udp real-time nio

我肯定遗漏了一些东西,但是我如何判断我的空 UDP 数据包是否是通过 DatagramChannel 发送方法发送的?如果它返回零字节,是否意味着我的空数据包已发送,或者是否意味着底层套接字缓冲区已满?

来自 API:

The number of bytes sent, which will be either the number of bytes that were remaining in the source buffer when this method was invoked or, if this channel is non-blocking, may be zero if there was insufficient room for the datagram in the underlying output buffer.

http://docs.oracle.com/javase/7/docs/api/java/nio/channels/DatagramChannel.html#send(java.nio.ByteBuffer,%20java.net.SocketAddress)

最佳答案

如果处于阻塞模式,则意味着零长度数据报已传输到套接字发送缓冲区。如果您处于非阻塞模式,这是一个折腾,但您可以通过使用选择器预先测试 channel 是否可写来解决它。

这也可能意味着什么都没有发生,具体取决于您在评论中提到的错误的状态。

关于java - 如果我尝试通过 DatagramChannel 发送空 UDP 数据包但底层套接字缓冲区已满,会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28246373/

相关文章:

java - socket.io-client java 未连接到服务器

html - 浏览器按原样显示由 C 程序写入套接字的 HTML 代码

java - Minecraft 模组 ".bindTexture"不起作用

java - 如何通过多线程在MySql中存储数据?

c++ - 多个本地进程具有相同的套接字

Java7 DatagramSocket.setReceiveBufferSize Windows和Linux之间的方式不同?

C++/Qt : How can I detect when a hostname or IP address refers to the current system?

java - java中socket api的问题

java - 使用 Scala Flume Sink 到 Spark

c++ - 使用 UDP 通过 UDP 将数据传输到非 ROS 计算机