2010-11-24 26 views
1

在普通阻塞套接字中,我可以使用Socket.getOutputStream()。flush()來部分控制何時發送TCP數據包。 SocketChannel是否有相同的操作?編輯:我的猜測是,每次我調用SocketChannel.write(ByteBuffer src)時,至少會發送一個單獨的數據包,即使緩衝區只有1個字節(假設Nagle關閉),對嗎?對於Java無阻塞套接字的flush操作

編輯:包 - >包,抱歉錯誤的拼寫。

回答

0

正如我最近指出Socket.getOutputStream()的flush()什麼也不做在Sun的JDK 6

然而,沒有一種機制保障是write()方法將發送一個數據包(不包),它可以發送更多或更少。所有你知道的是它已被傳遞給操作系統來處理它。

1

我猜你會喜歡寫東西

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

也許有更好的解決方案。