3

これが私のコードの抜粋です:

OutputStream out = this.socket.getOutputStream();
out.write(fourBytes);
out.write(someBytes);
out.flush();

最初のパッケージの長さはわずか 4 バイトですが、これは 2 つのパッケージで送信されます。バイト配列を連結して一緒に送信する以外の方法はありますか?

私はすでに試しsetTcpNoDelay(false)ました。

4

3 に答える 3

3

もちろん。を使用しBufferedOutputStreamます。:-P

setTcpNoDelay、Java がパケットを送信する方法ではなく、OS がパケットを送信する方法を変更します。後者を変更する唯一の方法は、上で提案したように、出力をバッファリングすることです。

ところで、これはデータが実際に分割されるパケット数には影響しません。繰り返しますが、それはOS次第であり、受信側で指定されたウィンドウにも依存します。したがって、パケットを使用してデータを区切ることはできません。

于 2011-05-24T12:08:18.163 に答える
1

バッファリングされた出力ストリームでラップする

于 2011-05-24T12:10:43.827 に答える
0

Nagleの無効化はsetTcpNoDelay(true)

于 2011-05-24T12:10:47.080 に答える