繁体   English   中英

在Android上丢失UDP套接字数据包

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM