为什么这种情况下会recv会出错?
mbctb 2015-07-22 09:00:56 我用的是TCP协议,在客户端和服务器之间传输数据时,我是这样的:每块数据都有一个数据头,数据头中定义了该数据的长度。然后接着才是真正的数据块。
然后在发送的时候,我是这样的:发送端用两次send函数来发送,一次发送数据头,一次发送真正的数据。接收端也用两次recv来接收。一次接收数据头,数据头收到以后,根据其中给出的长度,再进行第二次recv,接收的长度就是数据头中给出的长度。
可是我发现:这样子的话,会出错。第二次recv收不到数据。
如果发送的时候,把两块数据放在一起,用一次send发送。发现接收端两次recv就能正确收到。或者发送的时候虽分两次send发送。但接收的时候,只用一次recv(当然我预先知道总的长度),也可以把全部数据(包括数据头和数据体)全部收到。
这是怎么回事呢?不管接收端是阻塞方式还是非阻塞方式,好象均如此。