设为首页 加入收藏

TOP

Qt下应用QTcpServer与QTcpSocket实现Tcp控制(二)
2015-07-16 12:57:34 来源: 作者: 【 】 浏览:20
Tags:应用 QTcpServer QTcpSocket 实现 Tcp 控制
证时,会出现信息残缺,我的解决方案是使用延时策略,但是这并不是长久之计。
按照官方给的例子:
服务端发送数据:
void Server::sendFortune()
{
? ? QByteArray block;
? ? QDataStream out(&block, QIODevice::WriteOnly);
? ? out.setVersion(QDataStream::Qt_4_0);
? out << (quint16)0;
? ? out << fortunes.at(qrand() % fortunes.size());
? ? out.device()->seek(0);
? ? out << (quint16)(block.size() - sizeof(quint16));
?QTcpSocket *clientConnection = tcpServer->nextPendingConnection();
? ? connect(clientConnection, SIGNAL(disconnected()),
? ? ? ? ? ? clientConnection, SLOT(deleteLater()));
? clientConnection->write(block);
? ? clientConnection->disconnectFromHost();
}


客户端接受数据:
void Client::readFortune()
{
? ? QDataStream in(tcpSocket);
? ? in.setVersion(QDataStream::Qt_4_0);


? ? if (blockSize == 0) {
? ? ? ? if (tcpSocket->bytesAvailable() < (int)sizeof(quint16))
? ? ? ? ? ? return;


? ? ? ? in >> blockSize;
? ? }


? ? if (tcpSocket->bytesAvailable() < blockSize)
? ? ? ? return;
QString nextFortune;
? ? in >> nextFortune;


? ? if (nextFortune == currentFortune) {
? ? ? ? QTimer::singleShot(0, this, SLOT(requestNewFortune()));
? ? ? ? return;
? ? }


? ? currentFortune = nextFortune;
? ? statusLabel->setText(currentFortune);
? ? getFortuneButton->setEnabled(true);
}


缺点是每收发一回合信息,都要重连一次。


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android入门学习—Activity之间数.. 下一篇【JavaScript】利用正则表达式检..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: