2014-04-01 119 views
1

我想設置/增加數據報套接字的接收緩衝區大小。我想這樣做,因爲我在PC和位於同一本地網絡上的Android設備之間發送數據時遇到了一些隨機數據包丟失,我想測試如果增加緩衝區大小對減少此UDP是否有任何影響數據包丟失。我正在嘗試使用下面的代碼來設置緩衝區大小。Android DatagramSocket接收緩衝區大小

DatagramSocket socket = new DatagramSocket(); 
socket.setReceiveBufferSize(655360); 

再後來就(在我開始從插座讀取)我檢查接收緩衝器大小如下:

Log.i(TAG, "Size: " + socket.getReceiveBufferSize()); 

然而,日誌消息總是顯示的163840. 緩衝區大小這段代碼有什麼問題?我應該以另一種方式設置接收緩衝區大小。

感謝

回答

3

日誌消息始終顯示的163840.

這就是平臺給你一個緩衝大小。

這段代碼有什麼問題?

什麼都沒有。你需要閱讀Javadoc。該平臺可以調整您提供的價值。 「因爲SO_RCVBUF是一個提示,所以需要驗證緩衝區大小的應用程序應該調用getReceiveBufferSize().

您不需要640k的套接字接收緩衝區。數據包丟失主要發生在網絡中,只有在目標速度慢的情況下才會發生。

+0

那麼指定的緩衝區大小隻是一個指示? 我認爲這是自文檔說出的最小值: 「這是對內核的暗示;內核可能使用更大的緩衝區。」 我知道UDP是無連接的,因此會發生丟包,但我認爲我的數據包丟失過多。也許問題出在我的閱讀主題上。 – frans1989

+0

不管Javadoc可能會說什麼,內核也可能使用更小的緩衝區。它不是Java的,取決於內核。我懷疑問題出在網絡上而不是代碼中。 「太多」是主觀的。多少? – EJP

+0

那麼它並不總是恆定的,但平均而言,我會說每20個數據包就會丟失一個數據包。但它並不總是恆定的。我需要修改我的代碼以迎合數據包丟失,因爲正如你所說,它肯定會發生。謝謝 – frans1989