2012-04-18 52 views
0

我有一個設備,發送帶有1440byte有效載荷的TCP數據包,非常快,到Windows XP操作系統。我將TcpAckFrequency設置爲0,即在收到包後立即發回ACK。 我寫了一個線程讀取與插座的Java應用程序:TCP接收窗口大小總是滿的

in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
in.read(charArray, 0, 720); 

我的問題是,Windows緩衝區已滿收到一些(50-60)報文後,在那之後發送ACK DUP減慢了通訊。

我不明白爲什麼變得滿了,因爲我總是讀緩衝區?

回答

0

一個可能的解釋是Java應用程序無法跟上。換句話說,它不能在設備發送數據時快速處理數據。如果出現這種問題,您必須想出一個解決方案,讓應用程序更快地處理數據。

如果您有多個內核,可以通過重構Java應用程序以使用一個線程從套接字中讀取數據以及使用另一個線程(或多個線程)來執行處理,從而實現更好的吞吐。

另一個解決方案可能只是簡單介紹Java應用程序,看看是否有調優優化的空間。

最後,您可能可以通過對BufferedReader使用更大的緩衝區大小來提高吞吐量。

+0

問題是我收到一個數據包後繪製圖形,由於繪製過程可能窗口沒有足夠的時間來釋放緩衝區。現在,我跳過了繪圖功能,工作正常。 謝謝! – Tomi 2012-04-18 14:52:35