2014-04-01 118 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