Socket主机与客户机通信难点

本文探讨了使用Socket传输大量视频数据时遇到的数据不完整及丢失问题。分析了TCP协议下Socket分包机制,并提出两种解决方案:一是通过循环接收确保所有数据被接收;二是利用MSG_WAITALL参数强制接收指定长度的数据。
摘要由CSDN通过智能技术生成

         最近在研究视频传输,通过服务器将采集到的视频通过socket传输到远程终端,但每当建立好连接,服务器已经采集好数据,但将其通过send发送到终端,终端通过recv接受数据,但每次接受到的数据都不完整,大量数据丢失,很多书上只是接受了socket通信的方法 但没有提到大量数据传输时,数据丢失的解决办法和问题,恰巧我也遇到了,只是研究了一翻,发现原来socket发送数据时会讲数据进行分包出来,再TCP的数据格式中,最大的数据量为1500,所以每次接受的数据量默认最大的1500,如果你采用一次性read或者recv就可能导致接受到的数据丢失。

        解决办法有两个:一个是每次recv(socket_client,ptr,len,0),其中len<1500,然后反复写入,知道recv返回0,这样就把所以数据成功接受到了。

        或者将最后一个参数设置成MSG_WAITALL,这个参数的目的是强制一次接受len长度的数据,这样就不会受限制了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值