【发布时间】:2013-10-04 03:40:25
【问题描述】:
我有一个 android 应用程序需要每 100 毫秒通过协议 UDP 发送数据。每个 UDP 数据包平均有 15000 字节。数据包以广播方式发送
下面的每 100 毫秒行运行一个循环。
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, broadcast, 9876);
clientSocket.send(sendPacket);
应用程序开始正常工作,但大约 1 分钟后,接收数据包的频率会降低,直到数据包没有到达目的地。
UDP 数据包最大大小的理论限制(在 Windows 上)为 65507 字节
我知道网络的媒体 MTU 是 1500 字节,当我发送一个更大的数据包时,它会被分成几个片段,如果一个片段没有到达目的地,整个数据包就会丢失。
我不明白为什么在前 1 分钟数据包被正确发送,而在一段时间后数据包没有到达更多。所以我想知道解决这个问题的最佳方法是什么?
【问题讨论】:
-
BTW 片段也可能乱序到达。 ;)
-
我认为 TCP 不是一个选项?
-
我正在发送图片,如果我丢失了大约 30% 的数据包不会有问题。在这种情况下,tcp 速度较慢不是一个好主意。我的问题是一段时间后所有数据包都丢失了。谢谢
-
"我知道网络的媒体 MTU 是 1500 字节" - 很多网络都比这小。这只是以太网帧的大小。
标签: java android sockets networking udp