[英]Losing UDP socket packets on Android
我面临基于Android设备的UDP数据包丢失问题。 我有两个设备。 以下代码可在一台设备上正常工作。 另一台设备丢失了很多包裹。 我已经读过类似问题的解决方案 。 在此解决方案中,建议将数据报套接字大小设置为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
被选中的anwser的作者似乎在使用过去时时遇到了问题,并且几乎可以一直说话,但有时他会说
我删除了此代码设置缓冲区的大小,然后逐步接收所有数据包
因此,实际上它正在改变数据报缓冲区的大小,这似乎已引起了问题。
顺便说一句,设置缓冲区大小的方法可能可行,实际上日志消息会根据您的平台缓冲区大小做出响应,直到您无法更改为止,请参阅Android DatagramSocket接收缓冲区大小 。
我解决了我的问题。 我更改了接收数据代码。
过去的代码:
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.