0

を使用してapache.commons.net.telnetいます。

私は持っていchar[] arrayます。呼んでいますTelnetClient.getOutputStream().write(array[i]).

データが一度に 1 文字ずつ送信されることを期待していましたが、Wireshark では、最初の文字が単独で送信され、残りの文字が一緒に送信されることが示されています。このような状況になるのはなぜですか? また、データを 1 文字ずつ送信するにはどうすればよいですか?

4

3 に答える 3

1

わかった。これが正解です。データをできるだけ速く送信するには、次の手順を実行します。

出力ストリームでsetTcpNoDelay(true)を呼び出します。

配列全体でwriteを呼び出します。一度に1バイトずつ書き込む必要があります。配列全体を同時に書き込むと、はるかに高速になります。

書き込み後にflush()を呼び出します。

これは、データを送信するための最速の方法であり、最小の遅延を作成する方法でもあります。つまり、一度に1バイトずつ送信しても、サーバーがそれらをより速く受信することは保証されません。

一度に1バイトずつデータを送信すると、速度は遅くなりますが、速度は上がりません。

于 2012-04-06T15:58:42.680 に答える
0

flush()write()を呼び出すたびに呼び出してみましたか?

flush()関数は、バッファーがいっぱいになる前に、ストリーム内のすべてのものを送信する必要があります。

于 2012-04-06T14:52:09.753 に答える
0

本当に一度に1文字ずつ送信したい場合(なぜ、本当に遅くなります)、配列を繰り返し処理し、毎回1バイトでwriteを呼び出す必要があると思います。そして、各書き込み後にフラッシュします。のようなもの(テストされていませんが、ヒントが得られるはずです)。

OutputStream os=TelnetClient.getOutputStream();
for(int i=0;i!=array.length;i++) {
  os.write(array[i]);
  os.flush();
}
于 2012-04-06T14:52:21.727 に答える