• 8172阅读
  • 6回复

关于QTcpSocket 的一个问题 [复制链接]

上一主题 下一主题
离线shenyi26
 
只看楼主 倒序阅读 楼主  发表于: 2010-04-08
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
小弟初学QT,遇到一个问题,求解答,如下:
这是一段代码 QString temp(tr("@CU@"));        QString *a=new QString;
        for(int i=0;i<tcpClientSocketList.count();i++)        {            *a=temp+currentUsers.at(i);
            QMessageBox::information(0,tr("no"),*a);
            tcpClientSocket->write(a->toLatin1(),a->length());             a->clear();
        }如上,我想向tcpClientSocket写一连串的字符串,存放于QStringList currentUsers中的字符串,每一个字符串都有@CU@string 的样式,其中@CU@是字符串的开始旗标,但是我发现,qtcpsocket 会自动在所有数据都写完才发 ,也就是 buffer里的数据会变成 @CU@string@CU@string的样式,这样客户端就无法提取string了,但是 有一个很奇怪的现象,如果我加上黑体的那一句,这样数据写入完全正常,求解惑?
离线20044454
只看该作者 1楼 发表于: 2010-04-09
分享一下呀,我也写多客户端的程序呢
让我做一个Qt的大牛!!!!
离线haipeng31

只看该作者 2楼 发表于: 2010-05-06
我估计是不是QTcpSocket这个类有某个函数可以改变socket的选项的,Linux 的socket系统函数就有,QT应该有吧,具体我就不清楚了
离线beajisong

只看该作者 3楼 发表于: 2010-05-06
QMessageBox::information(0,tr("no"),*a);
会强制调用事件循环,事件循环会通过notifier分发网络数据到接口
所以就会发出去
其余情况,你循环N回,他都等或者回到事件循环,或者缓冲区满时才会发送
TCP编程中,你这种几次发送粘连的现象很正常,必须处理,不处理是不行的
离线hasitate

只看该作者 4楼 发表于: 2010-05-07
write()后,调用flush()试试
离线XChinux

只看该作者 5楼 发表于: 2010-09-03
引用第4楼hasitate于2010-05-07 15:41发表的  :
write()后,调用flush()试试


right.
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线jackliu8722
只看该作者 6楼 发表于: 2011-01-11
引用第4楼hasitate于2010-05-07 15:41发表的 :
write()后,调用flush()试试

4楼正解
快速回复
限100 字节
 
上一个 下一个