• 8768阅读
  • 1回复

QTcpSocket中的flush()? [复制链接]

上一主题 下一主题
离线fire_ball
 

只看楼主 倒序阅读 楼主  发表于: 2010-09-21
— 本帖被 XChinux 执行加亮操作(2010-09-21) —
我用QTcpSocket中的flush()立马发送数据,发现还是会出现串包。例子如下:
for(int i = 0; i<10 ; i++)
{
    m_tcpSocket.write(bytes);
    m_tcpSocket.flush();
}
我在flush()处打上断点,依次断点10次,服务器端接收的报文可以观察到接收的次数10次;
如果我取消断点的话,接收的报文次数就比10次少,有的报文会合并在一起。
这种情况下该如何解决?用sleep吗?我没用多线程,住线程如何解决?

用waitForBytesWritten()也没有用。
[ 此帖被fire_ball在2010-09-21 17:13重新编辑 ]
离线sbtree
只看该作者 1楼 发表于: 2010-09-22
flush的功能是把内部的缓冲区数据(应用层)写到网卡的物理缓冲区,至于网卡用多少次和经过多少延时把数据传送到对方的网卡实际上我们是不用关心的,这是数据链路层和物理层要做的事情,我们要关心的是数据本身是不是完整,所以在收到数据的时候对数据缓冲是必要的,回后才是对数据包分析。个人愚见,不当之处,敬请指教。

另外对你的“串包”概念不是很理解,这和收到的次数有什么关系?例如发送10次数据,收到5次,但是如果这5次的数据合起来与10次发送的数据合起来一样的话,你也说它是“串包”吗?
windows 7 + VC++2008 + Qt4.5.2
快速回复
限100 字节
 
上一个 下一个