• 7025阅读
  • 5回复

QTcpSocket 接收数据怎么一次性读回来----坛主帮忙 [复制链接]

上一主题 下一主题
离线wyz365889
 

只看楼主 正序阅读 楼主  发表于: 2011-12-27
void TCPClient::readMessage()
{

//    if(m_pTcpSocket->waitForReadyRead(1000))
//    {        

cout<<"wyz---------"<<endl;        QByteArray qba = m_pTcpSocket->readAll();  //读取数据
//}
}

数据太长时,  connect(m_pTcpSocket,SIGNAL(readyRead()),this,SLOT(readMessage())); readMessage调用两次,才完全读回来。
如果要一次性读回自己要的数据,怎么设置或通过什么方法来实现?
离线wyz365889

只看该作者 5楼 发表于: 2012-01-09
回 4楼(ninsun) 的帖子
呵呵,同感。超级不好用,,还要自己去重新组合数据。
离线ninsun

只看该作者 4楼 发表于: 2012-01-05
tcp传输最恶心的就是这个粘包和分包了.
没法用tcp本身控制的, 自己写个检测/处理分包粘包的方法吧.
或者直接用一些已经写好的库....
或者, 不用tcp,改用中间件, ZMQ神马的...
离线weihua1984

只看该作者 3楼 发表于: 2011-12-28
拆成两次?,一个完成的包分成两个包发过来吧?

tcp是字节流啊,底层有自己的发送缓冲的
你的包是1...,  2...,  3...,  4...
连续发送就可能成了
1...2.,         ..3..,          ..4...
三个包,接收后必须自己在重组一下
不知道咱俩说的是不是一个问题,
离线wyz365889

只看该作者 2楼 发表于: 2011-12-28
回 1楼(weihua1984) 的帖子
我服务器端发回来每个数据包都有唯一标识。但是每次发回来后,有标识的包又被拆成两次发回来了。这样我就无法拼接服务器端发回来的数据。。。

我很奇怪,qtcpsocket底下那么多种读取方法,怎么就没一种适合的。
离线weihua1984

只看该作者 1楼 发表于: 2011-12-27
自己做缓存白,不够一个完整包,就等着,下一个包来了后组装成完整包处理
要直接read正好一个完整包,够呛吧
不是你能控制的了的
快速回复
限100 字节
 
上一个 下一个