查看完整版本: [-- qtsocket的问题 --]

QTCN开发网 -> Qt基础编程 -> qtsocket的问题 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

boylafong 2017-09-09 21:11

qtsocket的问题

客户端发送了一组数据,超过了8192个字节

服务器接收最大值为10000个字节

可是接收信号槽没有一次接收完,第一次接收的长度为8192个字节,我在信号槽里面用 while 一直read接收都是0个字节,如果不用while来read,那么第二次信号槽触发会接收完剩余的数据

我知道可以用报文头报文尾来处理,可是我想一次在信号槽里面接收完,可以实现吗?

never_forget 2017-09-11 09:07
为什么用 while 接收,不是有信号嘛,何故?

lgao622 2017-09-11 17:14
never_forget:为什么用 while 接收,不是有信号嘛,何故? (2017-09-11 09:07) 

试试将客户端的发送缓存和服务端的接收缓存设置成10000字节。

stlcours 2017-09-11 17:55
lgao622:试试将客户端的发送缓存和服务端的接收缓存设置成10000字节。 (2017-09-11 17:14) 

怎么设?

dosmlp 2017-09-11 19:49
while循环可能会阻塞Qt事件系统,导致不能处理网络事件,于是就收不到更多数据了

xllwanlxy 2017-09-11 22:03
应该不是你想一次收完就收完的吧??

如果你非要使用while的话,在while中睡眠一会,大致是:
while(没接收完毕)
{
    if (可读数据长度大于0)
          读;
    
    msleep(10);
}

weiweiqiao 2017-09-20 10:39
never_forget:
为什么用 while 接收,不是有信号嘛,何故?

难道读取客户端的数据不会用到while么?我看Qt给的例子中readyRead信号触发的槽函数中也是要用while来读取完整数据的。

yuyu414 2017-09-21 15:17
一直while没有进入事件循环,当然接收不到,先缓存,然后下次数据来了再拼起来


查看完整版本: [-- qtsocket的问题 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled