引用第3楼suitsun_joe于2011-04-04 11:20发表的 回 2楼(wxj120bw) 的帖子 :
恩大体意思是这样,昨天我又详细分析了一下,为了让遇到同问题的人深入了解,我吧原因写到这里了,如下:
由于TCP的数据发送或者接收是需要有缓冲区的
因此在接收到开始的数据块大小标志之后并不能立刻直接读取后面的数据(数据长的话更是如此)
因此在读取数据的时候为了保证数据的完整,程序中一般加入if(tcpSocket->bytesAvailable()<nextBlockSize)break;也就是如果缓冲区中可用的数据tcpSocket->bytesAvailable()如果小于原来标记的数据块nextBlockSize大小的时候说明:后面缓冲区的数据还没有完全收到,这时候如果读取必然会出错,因此程序中用return进行等待以便继续检查,其实在一般的情况下如果发送简单的字符什么的不用这个判断也可以,但是这是万无一失的方法,这个例子是《C++ GUI Qt4》中的例子,还是比较专业的。
