gpt4 book ai didi

java - SocketChannel.write() 写入问题

转载 作者:搜寻专家 更新时间:2023-11-01 02:53:48 26 4
gpt4 key购买 nike

这里的问题是我可以看到数据正在被写入套接字,但它并不总是被发送。

这是一个代码片段

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 并返回到选择循环,而不是浪费时间旋转直到再次有空间。您当前的技术使其他服务 channel 处于饥饿状态并浪费 CPU 周期。

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

关于java - SocketChannel.write() 写入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5906444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com