• 7856阅读
  • 8回复

请教关于QSocket的问题 [复制链接]

上一主题 下一主题
离线alex_zhf
 
只看楼主 正序阅读 楼主  发表于: 2008-10-31
— 本帖被 XChinux 执行加亮操作(2008-11-01) —
我用QSocket以数据流的形式发送数据,发现服务器端接收的时候会出现接收了几次就丢包的现象,传输的数据大概3K,跟踪后发现QSocket发送时是分了两次发送的,而在服务器端可能因为两次发送时间过密造成接收不过来,有没有什么好办法控制客户端的分包发送呢,比如,发完一次,休息一段时间?
离线无境
只看该作者 8楼 发表于: 2010-06-04
您好,楼主这个问题,后来如何解决的啊?我也碰到了一样的问题,想设置QSOCKET的缓存,可是观察了一下,跟缓存也不大,因为开始的时候一个包被拆成了三个包发出去了,而后又两个包发出去了
离线hj1981
只看该作者 7楼 发表于: 2008-12-02
同样遇到这个问题,正在找原因
离线alex_zhf
只看该作者 6楼 发表于: 2008-11-06
楼上的说到4G以上,我现在4K都不到...
离线vrcats
只看该作者 5楼 发表于: 2008-11-04
QSocket有一个bug,就是发送4G以上块的时候会溢出。
离线alex_zhf
只看该作者 4楼 发表于: 2008-11-01
引用第2楼XChinux于2008-11-01 08:26发表的  :
因为数据发送时如果某次的数据没有达到缓冲区大小,则会缓存住待缓冲区满后一起发,所以另一端会出现一次接收不完全。
可以自己定义每个数据包长度(在数据开头处定义),双方接收时开头的按照数据包定义的长度来接收数据。或者每次发送的数据都固定大小,另一端接收时也按固定大小接收。还可以在每段数据发送完后再加发一个'\0',以让数据发送出去,另一端收数据时直到接收到'\0'才开始处理数据。

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

只看该作者 2楼 发表于: 2008-11-01
因为数据发送时如果某次的数据没有达到缓冲区大小,则会缓存住待缓冲区满后一起发,所以另一端会出现一次接收不完全。
可以自己定义每个数据包长度(在数据开头处定义),双方接收时开头的按照数据包定义的长度来接收数据。或者每次发送的数据都固定大小,另一端接收时也按固定大小接收。还可以在每段数据发送完后再加发一个'\0',以让数据发送出去,另一端收数据时直到接收到'\0'才开始处理数据。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线alex_zhf
只看该作者 1楼 发表于: 2008-10-31
怎么没有人顶阿,自己顶,高手指点一下吧,为这个问题困扰了很久了!
快速回复
限100 字节
 
上一个 下一个