2012-04-06 10 views
0

私はapache.commons.net.telnetを使用しています。一度に1つずつTelnetOutputStreamに文字を書き込む方法はありますか?

私はchar[] arrayです。私は電話していますTelnetClient.getOutputStream().write(array[i]).

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

+0

write()の後にOutputstream.flush()を試しましたか? – MartinK

+0

はい、 'write()'の後に 'flush()'を呼び出します! – DenisM

答えて

1

OK。正しい答えはここにあります。できるだけ早くデータを送信するには、次のようにします。

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

アレイ全体で書き込みを呼び出します。 NEWER EVERは一度に1バイトを書き込む必要があります。同時に全体の配列を書き込む方がはるかに高速になります。

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

これはデータを送信する最も速い方法であり、レイテンシを最小限に抑える方法でもあります。つまり、一度に1つずつバイトを送信しても、サーバーがそれ以上速く受信することはありません。

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

0

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

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

0

本当にあなたが一度に1つずつチャンクを送信したいのであれば(なぜ、それは本当にあなたを遅くするでしょう)、私はあなたが配列を反復し、毎回1バイトで書き込む必要があると思います。その後、各書き込みの後にフラッシュします。何かのような(テストされていないが、それはあなたにヒントを与える必要があります)。

OutputStream os=TelnetClient.getOutputStream(); 
for(int i=0;i!=array.length;i++) { 
    os.write(array[i]); 
    os.flush(); 
} 
+0

私は正確にやっています。しかし、それは動作しません。 – DenisM

+0

これは、あなたのosがデータを送信する前に、より多くのデータを待っているからかもしれません。ちょうどテスト、各フラッシュの後にThread.sleep(10)への呼び出しを追加しようとします。しかし、私はまだあなたがこれをしたい理由を理解していません。一度に1バイトずつデータを送信するには、一度に送信する限り、少なくとも100倍かかるでしょう。 – MTilsted

+0

私はリアルタイムでtelnetサーバーから応答を受け取る必要があります! – DenisM

関連する問題