Java 丢弃了一半的 UDP 数据包

标签 java c networking udp datagram

我有一个简单的客户端/服务器设置。服务器在 C 中,查询服务器的客户端是 Java。

我的问题是,当我通过连接发送带宽密集型数据(例如视频帧)时,它会丢弃多达一半的数据包。我确保我在服务器端正确地分段了 udp 数据包(udp 的最大有效负载长度为 2^16)。我验证了服务器正在发送数据包(printf sendto() 的结果)。但是 java 似乎没有得到一半的数据。

此外,当我切换到 TCP 时,所有视频帧都通过了,但延迟开始增加,在几秒钟的运行时间后增加了几秒钟的延迟。

有什么明显的我遗漏的吗?我就是想不通。

最佳答案

获取像Wireshark这样的网络工具这样您就可以看到线路上发生了什么。

UDP 不会尝试重新传输,因此如果数据包在某处丢失,则由程序来处理丢失的问题。 TCP 将努力按顺序将所有数据包交付给程序,丢弃重复数据并自行请求丢失的数据包。如果您看到高延迟,我敢打赌您也会看到 TCP 的大量数据包丢失,这将显示为来自服务器的重新传输。如果您没有看到 TCP 重传,则可能是客户端处理数据的速度不够快,无法跟上。

关于Java 丢弃了一半的 UDP 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2440869/

相关文章:

java - 未在 Storm UI 中创建 Storm 拓扑

java - 如何从机场代码获取纬度和经度?

Java:声明和初始化的最佳实践

C内存管理初学者题

c - INT_MIN % -1 会产生未定义的行为吗?

c - 理解 void 指针语句的问题

java - 如何使用 Hibernate 检索一组成员对象?

linux - Linux 中的 ARP 创建失败条目

linux - 如何让netcat多次接收数据包?

java - 网络问题!(多线程客户端/服务器)