我正面临基于Android设备的UDP丢包问题。我有两个设备。以下代码在一台设备上正常运行。另一台设备丢失了很多包。我已经阅读了solution of similar problem。在此解决方案中,建议将数据报套接字大小设置为64k。但是我无法设置它。
如何更改数据报缓冲区大小?
我的代码:
DatagramSocket udpSocket = null;
try {
udpSocket = new DatagramSocket(5004);
udpSocket.setReceiveBufferSize(64*1024);
Log.d("UDPSocket", "Buffer Size : " + udpSocket.getReceiveBufferSize());
} catch (SocketException e1) {
e1.printStackTrace();
}
日志:
05-14 10:34:05.960: D/UDPSocket(28021): Buffer Size : 112640
答案 0 :(得分:0)
选择的anwser的作者似乎在使用过去式时遇到问题并且几乎所有时间都会说话,但有一次他确实说了
我删除了此代码设置缓冲区大小,然后收到所有数据包
所以实际上它正在改变数据报缓冲区大小,这似乎已经引起了它的问题。
顺便说一句,你设置buffersize的方法可能有效,事实上日志消息会响应你的平台缓冲区大小,你无法改变,请参阅Android DatagramSocket receive buffer size。
答案 1 :(得分:0)
我解决了我的问题。 我改变了我的接收数据代码。
过去的代码:
byte[] receiveData = new byte[1328];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
try {
udpSocket.receive(receivePacket);
} catch (IOException e) {
e.printStackTrace();
}
新代码:
ParcelFileDescriptor parcelFileDescriptor = ParcelFileDescriptor.fromDatagramSocket(udpSocket);
FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
FileInputStream fin = new FileInputStream(fileDescriptor);
byte[] receiveData = new byte[1328];
int readByte = fin.read(receiveData);