を使用してapache.commons.net.telnet
います。
私は持っていchar[] array
ます。呼んでいますTelnetClient.getOutputStream().write(array[i]).
データが一度に 1 文字ずつ送信されることを期待していましたが、Wireshark では、最初の文字が単独で送信され、残りの文字が一緒に送信されることが示されています。このような状況になるのはなぜですか? また、データを 1 文字ずつ送信するにはどうすればよいですか?
を使用してapache.commons.net.telnet
います。
私は持っていchar[] array
ます。呼んでいますTelnetClient.getOutputStream().write(array[i]).
データが一度に 1 文字ずつ送信されることを期待していましたが、Wireshark では、最初の文字が単独で送信され、残りの文字が一緒に送信されることが示されています。このような状況になるのはなぜですか? また、データを 1 文字ずつ送信するにはどうすればよいですか?
わかった。これが正解です。データをできるだけ速く送信するには、次の手順を実行します。
出力ストリームでsetTcpNoDelay(true)を呼び出します。
配列全体でwriteを呼び出します。一度に1バイトずつ書き込む必要があります。配列全体を同時に書き込むと、はるかに高速になります。
書き込み後にflush()を呼び出します。
これは、データを送信するための最速の方法であり、最小の遅延を作成する方法でもあります。つまり、一度に1バイトずつ送信しても、サーバーがそれらをより速く受信することは保証されません。
一度に1バイトずつデータを送信すると、速度は遅くなりますが、速度は上がりません。
flush()
write()を呼び出すたびに呼び出してみましたか?
flush()
関数は、バッファーがいっぱいになる前に、ストリーム内のすべてのものを送信する必要があります。
本当に一度に1文字ずつ送信したい場合(なぜ、本当に遅くなります)、配列を繰り返し処理し、毎回1バイトでwriteを呼び出す必要があると思います。そして、各書き込み後にフラッシュします。のようなもの(テストされていませんが、ヒントが得られるはずです)。
OutputStream os=TelnetClient.getOutputStream();
for(int i=0;i!=array.length;i++) {
os.write(array[i]);
os.flush();
}