2012-04-06 43 views
0

我正在使用apache.commons.net.telnet。我有char[] array。我打電話TelnetClient.getOutputStream().write(array[i]).如何一次將一個字符寫入TelnetOutputStream?

我預計我的數據一次只能由一個字符發送,但Wireshark顯示第一個字符是單獨發送的,其餘字符一起發送。 爲什麼我會遇到這種情況,如何才能逐字發送我的數據?

+0

您是否已經在write()之後嘗試Outputstream.flush()? – MartinK 2012-04-06 14:52:17

+0

是的,我在'write()'後面調用'flush()'! – DenisM 2012-04-06 14:57:08

回答

1

好的。這是正確的答案。爲了儘可能快地發送數據,請執行以下操作:

呼叫setTcpNoDelay(真)在你的輸出流。

用您的整個陣列調用寫入。您應該每次都寫一個字節。同時寫入整個陣列會快得多。

寫完後調用flush()。

這是發送數據的最快途徑,它也將創造至少延遲的方式。即:一次發送一個字節不會確保服務器能夠更快地接收它們。

在同一時間發送一個字節的數據會讓你放慢腳步,不加快速度。

0

你有沒有打過電話flush()每次通話後寫的()?充滿緩衝之前

flush()功能應在流中發送任何東西。

0

如果你真的想要一個發送字符在一個時間(爲什麼,它真的會減慢你的速度),我想你必須迭代這個數組並調用帶有一個單字節每次寫。然後在每次寫入後刷新。像(沒有測試過,但它應該給你一個提示)。

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

我正在做。但它不起作用。 – DenisM 2012-04-06 14:58:40

+0

這可能是因爲您的操作系統在發送數據之前會保持數據等待更多數據。只是一個測試,嘗試在每次刷新後向Thread.sleep(10)添加一個調用。但我仍然不明白你爲什麼要這樣做。一次發送一個字節的數據至少需要一次發送100次。 – MTilsted 2012-04-06 15:20:59

+0

我需要實時接收來自telnet服務器的響應! – DenisM 2012-04-06 15:37:25

相關問題