引用第2楼XChinux于2008-11-01 08:26发表的 :
因为数据发送时如果某次的数据没有达到缓冲区大小,则会缓存住待缓冲区满后一起发,所以另一端会出现一次接收不完全。
可以自己定义每个数据包长度(在数据开头处定义),双方接收时开头的按照数据包定义的长度来接收数据。或者每次发送的数据都固定大小,另一端接收时也按固定大小接收。还可以在每段数据发送完后再加发一个'\0',以让数据发送出去,另一端收数据时直到接收到'\0'才开始处理数据。
不好意思,上面的回复中由于乱码出错了,再写一遍。
感谢斑竹的回复,不过还有有一些不明白:
第一、您说数据要等到缓冲区满后一起发送。但是根据我的观察好像不是这样。因为我发送小文件的时候都可以每次正常按时收到数据。而发送大量数据时候并不是太少而是太多,所以每次发送都会被自动分成了几次发送。
第二、斑竹说可以在数据头加上发送数据的大小,或者在尾巴加上‘\0’,能否说得具体点?一来我要发送的是XML格式组织的文档,不好人为拆分它的结构,二来QSocket的发送机制应该是自动的吧,我怎么限定它每次发多少?
第三、有没有人知道QSocket每次能发多少数据量?
再次感谢斑竹,非常棒的论坛!