最近在研究视频传输,通过服务器将采集到的视频通过socket传输到远程终端,但每当建立好连接,服务器已经采集好数据,但将其通过send发送到终端,终端通过recv接受数据,但每次接受到的数据都不完整,大量数据丢失,很多书上只是接受了socket通信的方法 但没有提到大量数据传输时,数据丢失的解决办法和问题,恰巧我也遇到了,只是研究了一翻,发现原来socket发送数据时会讲数据进行分包出来,再TCP的数据格式中,最大的数据量为1500,所以每次接受的数据量默认最大的1500,如果你采用一次性read或者recv就可能导致接受到的数据丢失。
解决办法有两个:一个是每次recv(socket_client,ptr,len,0),其中len<1500,然后反复写入,知道recv返回0,这样就把所以数据成功接受到了。
或者将最后一个参数设置成MSG_WAITALL,这个参数的目的是强制一次接受len长度的数据,这样就不会受限制了。