Java非阻塞套接字的刷新操作

时间:2010-11-24 13:49:03

标签: java sockets networking nonblocking

在普通的阻塞套接字中,我可以使用Socket.getOutputStream()。flush()来部分控制何时发送TCP数据包。是否有SocketChannel的等效操作?

编辑:我的猜测是,每当我调用SocketChannel.write(ByteBuffer src)时,至少会发送一个单独的数据包,即使缓冲区只有1个字节(假设Nagle关闭),我是对的吗?

编辑:包 - >包裹,抱歉拼写错误。

2 个答案:

答案 0 :(得分:1)

我猜你可以写点像

while (buf.hasRemaining()) {
    socketChan.write(buf);
}

也许有更好的解决方案。

答案 1 :(得分:0)

正如我最近提到的Socket.getOutputStream()。flush()在Sun的JDK 6中什么也没做。

但是,没有保证write()会发送一个或多或少发送的数据包(不是包)。所有你知道的是它已被传递给操作系统来处理它。