【发布时间】:2010-03-14 01:41:11
【问题描述】:
我有一个简单的客户端/服务器设置。服务器是 C 语言,而查询服务器的客户端是 Java。
我的问题是,当我通过连接发送带宽密集型数据(例如视频帧)时,它会丢弃多达一半的数据包。我确保在服务器端正确地对 udp 数据包进行分段(udp 的最大有效负载长度为 2^16)。我验证了服务器正在发送数据包(printf sendto() 的结果)。但是 java 似乎并没有得到一半的数据。
此外,当我切换到 TCP 时,所有视频帧都能通过,但延迟开始增加,在运行几秒钟后增加了几秒钟的延迟。
我有什么明显的遗漏吗?我似乎无法弄清楚这一点。
【问题讨论】:
-
您确定是“Java”而不是您的网络吗?此外,与 TCP 不同,UDP 不保证数据包的传递、顺序或重复。
-
使用 TCP 会导致延迟这一事实告诉我,您正试图向网络中注入比它可以承载的更多的数据。由于您有来自服务器端发送数据包的日志,因此您应该能够大致了解每秒发送了多少数据。是否与您的网络容量兼容?
标签: java c networking udp datagram