我开发了一个C ++应用程序,可通过UDP在Odroid设备上流式传输来自网络摄像头的视频。客户端是使用简单UDP套接字的iPhone应用程序,它可以通过Wi-fi完美运行,但不能通过LTE完美运行。 sendto()调用可以正常工作,但是recvfrom()会永远阻塞。首先,我认为这与iPhone阻止UDP流量有关,但是我还尝试在连接到iPhone热点并因此通过LTE的笔记本电脑上尝试一个客户端。 您是否认为电话提供商会阻止UDP流量? 我更喜欢UDP而不是TCP,以实现更快的流传输。 任何建议将不胜感激! 谢谢!
更新:经过进一步检查,我发现了问题的原因。事实证明,LTE上的UDP设置了IP_MTU_DISCOVER标志,如果用户的数据包大于设备的MTU,则它不执行IP分段,而只是丢弃数据包。我的应用程序正在发送大于MTU的数据包,但在Wi-fi情况下,它们在IP层中被分段。如果禁用IP_MTU_DISCOVER标志,则大数据包将被分段并成功到达目标。另一种选择是从应用程序发送小于MTU的数据包。两种方法的效果都不尽如人意,但至少可以解决这个谜。