linux socket发送大量数据错乱,高分求解linux socket通信 UDP丢包问题

在使用UDP进行通信时遇到丢包问题,主要是由于UDP的无连接性和无序性。解决方案包括增加接收确认机制、增大socket接收缓存、实现丢包重传策略,或者在上层协议中模拟TCP的可靠性。丢包可能由服务器接收缓存满或网络路由导致,应对策略包括回包确认、超时重发和流量控制。
摘要由CSDN通过智能技术生成

最近在做一个项目,在这之前,做了个验证程序.

发现客户端连续发来1000个1024字节的包,服务器端出现了丢包现象.

纠其原因,是服务端在还未完全处理掉数据,客户端已经数据发送完毕且关闭了.

有没有成熟的解决方案来解决这个问题.

我用过sleep(1),暂时解决这个问题,但是这不是根本解决办法,如果数据量大而多,网络情况不太好的话,还是有可能丢失.

希望大俠帮帮忙啊!

|

有两种方法解决楼主的问题:

方法一:重新设计一下协议,增加接收确认超时重发。(推荐)

方法二:在接收方,将通信和处理分开,增加个应用缓冲区;如果有需要增加接收socket的系统缓冲区。(本方法不能从根本解决问题,只能改善)

|

网络丢包,是再正常不过的了。

既然用UDP,就要接受丢包的现实,否则请用TCP。

如果必须使用UDP,而且丢包又是不能接受的,只好自己实现确认和重传,说白了,就是自己实现TCP(当然是部分和有限的简单实现)。

|

采用回包机制,每个发包必须收到回包后再发下一个

|

丢包的原因我想并不是“服务端在还未完全处理掉数据,客户端已经数据发送完毕且关闭了”,而是服务器端的socket接收缓存满了(udp没有流量控制,因此发送速度比接收速度快,很容易出现这种情况),然后系统就会将后来收到的包丢弃。你可以尝试用setsockopt()将接收缓存(SO_RCVBUF)加大看看能不能解决问题。

|

可以采用回包机制,但处理起来还是比较麻烦....服务器端可以加一个判断对数据是否接收进行重发.

但是我个人感觉L

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值