2

我正在尝试设置/增加数据报套接字的接收缓冲区大小。我想这样做,因为在位于同一本地网络上的 PC 和 Android 设备之间发送数据时我遇到了一些随机数据包丢失,我想测试增加缓冲区大小是否会对减少此 UDP 产生任何影响数据包丢失。我正在尝试使用以下代码设置缓冲区大小。

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

然后稍后(在我开始从套接字读取之前)我检查接收缓冲区大小,如下所示:

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

但是,日志消息总是显示缓冲区大小为 163840。这段代码有什么问题?我是否应该以另一种方式设置接收缓冲区大小。

谢谢

4

1 回答 1

4

日志消息始终显示缓冲区大小为 163840。

这就是平台给你的。

这段代码有什么问题?

没有什么。您需要阅读 Javadoc。平台可能会向上或向下调整您提供的值。“因为SO_RCVBUF是一个提示,想要验证缓冲区设置大小的应用程序应该调用getReceiveBufferSize().

您不需要 640k 的套接字接收缓冲区。数据包丢失主要发生在网络中,并且只有在您阅读缓慢时才会发生在目标上。

于 2014-04-01T07:03:59.650 回答