在普通阻塞套接字中,我可以使用Socket.getOutputStream()。flush()来部分控制何时发送TCP数据包。 SocketChannel是否有相同的操作?编辑:我的猜测是,每次我调用SocketChannel.write(ByteBuffer src)时,至少会发送一个单独的数据包,即使缓冲区只有1个字节(假设Nagle关闭),对吗?对于Java无阻塞套接字的flush操作
编辑:包 - >包,抱歉错误的拼写。
在普通阻塞套接字中,我可以使用Socket.getOutputStream()。flush()来部分控制何时发送TCP数据包。 SocketChannel是否有相同的操作?编辑:我的猜测是,每次我调用SocketChannel.write(ByteBuffer src)时,至少会发送一个单独的数据包,即使缓冲区只有1个字节(假设Nagle关闭),对吗?对于Java无阻塞套接字的flush操作
编辑:包 - >包,抱歉错误的拼写。
正如我最近指出Socket.getOutputStream()的flush()什么也不做在Sun的JDK 6
然而,没有一种机制保障是write()方法将发送一个数据包(不包),它可以发送更多或更少。所有你知道的是它已被传递给操作系统来处理它。
我猜你会喜欢写东西
while (buf.hasRemaining()) {
socketChan.write(buf);
}
也许有更好的解决方案。