这里的问题是我可以看到数据正被写入套接字,但它并不总是被发送.
这是一个代码片段
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我使用TCPMon来查看实际数据是否被写入套接字 - 它是做什么的.
但是使用WireShark(另一种网络监控工具)我看不到数据包通过网卡.
任何帮助,将不胜感激
无论如何,你的代码是错误的.如果写入返回零,则套接字发送缓冲区已满,因此您应该注册OP_WRITE并返回到选择循环,而不是浪费时间旋转直到再次有空间.您现有的技术使其他服务渠道匮乏,浪费CPU周期.
此外,此时的测试isConnected()是徒劳的.它是.你连接了它.该方法告诉您套接字的状态,而不是连接.
| 归档时间: |
|
| 查看次数: |
4074 次 |
| 最近记录: |