2010-11-24 6 views
1

In normalen blockierenden Socket kann ich Socket.getOutputStream(). Flush(), um teilweise zu steuern, wann ein TCP-Paket senden. Gibt es eine gleichwertige Operation für SocketChannel?Flush-Operation für nicht blockierenden Java-Socket

Edit: Meine Schätzung ist, dass jedes Mal, wenn ich SocketChannel.write (ByteBuffer src) aufrufen, mindestens ein einzelnes Paket gesendet wird, auch der Puffer hat nur 1 Byte (davon ausgehen Nagle ist), habe ich Recht?

Bearbeiten: Paket -> Paket, tut mir leid für falsche Schreibweise.

Antwort

0

Wie ich vor kurzem festgestellt Socket.getOutputStream(). Flush() tut nichts in Suns JDK 6.

Es besteht jedoch keine Garantie ist, dass() schreiben, wird ein Paket (nicht-Paket) senden es mehr senden konnte oder weniger. Alles was Sie wissen ist, dass es an das Betriebssystem übergeben wurde, um damit umzugehen.

1

Ich denke, Sie so etwas wie

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

dort Vielleicht schreiben könnte, ist eine bessere Lösung.

Verwandte Themen