SocketChannel.write()编写问题

这里的问题是我可以看到数据正在写到套接字,但始终没有发送。

这是一个代码片段

ByteBuffer writeBuffer = ByteBuffer.allocate(8192);

writeBuffer.clear();

writeBuffer.put("heartbeat".getBytes());

writeBuffer.flip();

LOG.debug("is connected: " + socketChannel.isConnected());

int bytesWritten = 0;

if (key.isWritable()) {

while (writeBuffer.hasRemaining()) {

bytesWritten += socketChannel.write(writeBuffer);

}

}

我使用TCPMon来查看是否将实际数据写到套接字-这样做是。

但是使用WireShark(另一个网络监视工具)时,我看不到数据包通过NIC。

任何帮助,将不胜感激

回答:

无论如何,您的代码是错误的。如果写入返回零,则套接字发送缓冲区已满,因此您应该注册OP_WRITE并返回到select循环,而不是浪费时间旋转直到再次有空间。您当前的技术使其他服务渠道匮乏,并且浪费了CPU周期。

而且,此时的测试isConnected()是徒劳的。它是。您已连接。该方法告诉您套接字的状态,而不是连接的状态。

以上是 SocketChannel.write()编写问题 的全部内容, 来源链接: utcz.com/qa/412463.html

回到顶部