• 4103阅读
  • 0回复

《C++ GUI QT4编程》网络编程例子的一个疑问 [复制链接]

上一主题 下一主题
离线小意达
 
只看楼主 倒序阅读 楼主  发表于: 2012-05-09
关键词: 网络通信网络
最近开始学习网络编程,看了《C++ GUI QT4编程》第15章网络部分的一个例子,就是TCP客户/服务器应用程序的那个:客户端一个QTcpSocket向服务器QTcpServer申请建立连接,QTcpServer新建一个QTcpSocket与客户端进行通信。我先贴下服务器给客户端发送数据的代码段(我进行了适当的修改):
  1. [backcolor=#ffffff]服务器端发送数据代码段:[/backcolor]
  2. for(int i =0; i<3;++i)
  3. {
  4. QByteArray block;
  5. QDataStream out(&block, QIODevice::WriteOnly);
  6. out.setVersion(QDataStream::Qt_4_3);
  7. quint16 duration = rand() % 200;
  8. out << quint16(0) << date << time << duration << quint8(1)
  9. << QString("InterCity");
  10. out.device()->seek(0);
  11. out << quint16(block.size() - sizeof(quint16));
  12. write(block);
  13. }
  14. //我让服务器端的套接字发送了三次相同的数据块
   然后是客户端代码:
  1. connect(&tcpSocket, SIGNAL(readyRead()),
  2. this, SLOT(updateTableWidget()));
  3. ........
  4. void TripPlanner::updateTableWidget()
  5. {
  6. //接收服务器端数据块,更新视图
  7. }

我的问题是:服务器端发送了三次数据块,那么是每发送一次,客户端的tcpSocket就会发射readyRead()信号,还是服务器端三次发送完毕后,客户端的tcpSocket才会发射readyRead信号?我自己设断点调试了下,发现是服务器端把所有数据都发送完后客户端的updateTableWidget() 槽函数才会被触发,且只被触发一次。这是不是说明readyRead()信号是在所有服务器端数据块都发送出去后才会发射的?那么怎样设置才能让发送端每次发送数据块出去后接收端能立即发射readyRead信号呢?
快速回复
限100 字节
 
上一个 下一个