socket recv 的问题

举例说,如果是接收2M大小的内容的话,可能接收不完整。比如说就接收了1.5M,之后需要再调用recv接收余下的内容。那么接收2k大小的数据,会不会也出现接收不完整的情况呢... 举例说,如果是接收2M大小的内容的话,可能接收不完整。比如说就接收了1.5M,之后需要再调用recv接收余下的内容。那么接收2k大小的数据,会不会也出现接收不完整的情况呢,比如说只接收1.5k
就来说udp,传输数据量小比如说2k也会出现传输不完整吗
展开
 我来答
memorymyann
2010-08-05 · TA获得超过636个赞
知道小有建树答主
回答量:235
采纳率:0%
帮助的人:276万
展开全部
TCP本身提供超时和重传机制,无论多少,要么全部传输到,要么全部都接受不到,不会出现不完整现象。

UDP不太相同。

具体原因:
网络承载的一次传输能力有限,一般为1500个字节,除去IP头部,TCP头或者UDP头部,以太网头,一次传输的数据就以自己使用来说最好不要超过1400个字节。(具有分片能力IP和TCP)

现在拿你的情况来说,比如是2M,如果TCP传输的话,TCP首先会对2M数据分割,使他们成为1500字节/个的包,然后传输到对方机器,对方的TCP会从新组装所有到达的包,然后返回给应用程序。如果中途丢了任何一个包,TCP会负责重传这个包,如果确实无法传到,那么TCP就无法重组完整的数据给应用进程,TCP做法就是不会把任何数据给应用进程,所以TCP就是要么全部到达,要么全部放弃。

UDP不太相同,UDP不支持分片,如果用它传输2M数据,一般的情况是直接报错。当然也有可能的情况是IP层会将UDP的包分片,但IP不保证数据的可靠性,也就是到达对方机器后,很有可能IP层在重组数据(IP分的片,会在IP层重组)失败,一旦无法从组,IP就不会把失败的数据上传给UDP。传输失败。

从这样看来似乎是不会出现不完整的现象,但UDP本身也是为了达到传输目的而存在的,使用UDP的老道的人员都会注意,不会让UDP承载的数据量超过MTU,一般最好别超过1400,因此他们一般做法对于2M数据,自己首先就开始分片,然后再将分好的数据片交由UDP传输,然后再接受方,自己的应用程序重组。所以不完整的现象是自己分的UDP片被丢。

TCP分片和IP分片看上去有点重复,不过实际不是这样,这个就不扯远了。
moxsone
2010-08-04 · TA获得超过3332个赞
知道大有可为答主
回答量:2796
采纳率:50%
帮助的人:1503万
展开全部
如果是用udp方式的话可能会出现你说的情况,那样的话就需要你自己控制要求重发数据,如果是TCP方式的话一般情况不会发生这样的情况,除非连接断掉.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式