Java丢弃一半的UDP数据包

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

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

此外,当我切换到TCP时,所有视频帧都通过但延迟开始累积,在运行几秒后增加几秒延迟.

我有什么明显的遗失吗?我似乎无法弄清楚这一点.

解决方法

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

UDP不进行重传尝试,因此如果某个数据包被丢弃,则由程序来处理丢失. TCP将努力将所有数据包按顺序传送到程序,丢弃重复并自行请求丢失数据包.如果你看到高延迟,我敢打赌你会看到很多TCP丢包,这将显示为来自服务器的重传.如果您没有看到TCP重新传输,可能客户端没有足够快地处理数据以跟上.

相关文章

前言 逆向工程从数据库表直接生成代码,是日常开发中常用的敏...
前言 Java网络编程之Socket套接字,Socket套接字使用TCP提供...
前言 虽然现在已经很少项目会涉及GUI技术,但作为一个合格的...
前言 几乎所有的系统都有密码安全要求,这是基础的安全策略,...
前言 当我们在写设计文档,或者是其他涉及到数据架构、表结构...
前言 Fiddler是一款强大的Web调试代理工具,又称抓包软件,本...