QTcpSocket的一次奇异之旅
2017-02-09 22:22
573 查看
客户端与服务度取得连接,然后,
1.客户端做的就是,在连接建立后,打印当前时间,并立即向服务度发送数据;
2.服务端做的就是,在收到新的连接后,保存该socket,监听该socket的readyread信号,并向该socket发送数据。此时服务端也收到客户端发的数据,触发了readyread信号,因此服务端还向该socket发送了与客户端发来的一样的数据。
这时候,奇怪的事情就发生了,服务端发送了两条信息,但客户端收到的结果却不一样,有时是正确的两条信息,有时却是两条信息合并成一条。
相关的日志打印:
服务端:
客户端:
从上面的时间可以看出,数据发送的顺序是,客户端–服务端 ==> 服务端–客户端 ==> 服务端–客户端,服务端两条数据间隔了0.006秒,因此客户端接收到的有时候就是一条。
这种情况在10次里面出现了3次,暂时还没想到好的方法来规避,大家如果有什么好的办法,欢迎讨论。
附上相关代码:
服务端代码
客户端代码:
软件结果:
1.客户端做的就是,在连接建立后,打印当前时间,并立即向服务度发送数据;
2.服务端做的就是,在收到新的连接后,保存该socket,监听该socket的readyread信号,并向该socket发送数据。此时服务端也收到客户端发的数据,触发了readyread信号,因此服务端还向该socket发送了与客户端发来的一样的数据。
这时候,奇怪的事情就发生了,服务端发送了两条信息,但客户端收到的结果却不一样,有时是正确的两条信息,有时却是两条信息合并成一条。
相关的日志打印:
服务端:
OnNewConnection: "22:26:20.169" OnReadyRead: "22:26:20.179"
客户端:
"22:26:20.176"
从上面的时间可以看出,数据发送的顺序是,客户端–服务端 ==> 服务端–客户端 ==> 服务端–客户端,服务端两条数据间隔了0.006秒,因此客户端接收到的有时候就是一条。
这种情况在10次里面出现了3次,暂时还没想到好的方法来规避,大家如果有什么好的办法,欢迎讨论。
附上相关代码:
服务端代码
void Server::OnNewConnection() { QTcpSocket *clientConnection = m_server->nextPendingConnection(); connect(clientConnection,SIGNAL(disconnected()),clientConnection,SLOT(deleteLater())); connect(clientConnection,SIGNAL(readyRead()),this,SLOT(OnReadyRead())); qDebug()<<"OnNewConnection: "<<QTime::currentTime().toString("hh:mm:ss.zzz"); clientConnection->write("Hello,New Client.I'm Server."); } void Server::OnReadyRead() { QTcpSocket *clientSocket = qobject_cast<QTcpSocket*>(sender()); qDebug()<<"OnReadyRead: "<<QTime::currentTime().toString("hh:mm:ss.zzz"); clientSocket->write(clientSocket->readAll()); }
客户端代码:
void Client::OnConnected() { qDebug()<<QTime::currentTime().toString("hh:mm:ss.zzz"); m_socket->write("Hello,I'm Client."); } void Client::OnReadyRead() { QByteArray ba = m_socket->readLine(); QString text = "Server: " + QString::fromLocal8Bit(ba); ui->listWidget_History->addItem(text); }
软件结果:
相关文章推荐
- QT学习 第一章:基本对话框
- 使用Shiboken为C++和Qt库创建Python绑定
- Qt 5.6更新至RC版,最终版本近在咫尺
- Qt定时器和随机数详解
- Qt实现图片移动实例(图文教程)
- C++ Qt属性系统详细介绍
- Qt for Android开发实例教程
- Qt如何设置窗口屏幕居中显示以及设置大小
- QModelIndex/Role/Model介紹<二>
- Qt Model/View/Delegate浅谈 - QAbstractListModel
- Qt Model/View/Delegate浅谈 - roleNames()
- QT历程(一):与CryptoJs对应的AES加密
- 基于PyQt5的快速开发框架QFramer
- OSX下安装PyQt
- ok6410开发板移植DirectFB手记
- 【笔记】给Qt内嵌一个Chrome吧
- 【算法】最短路径之A*搜索
- qt入门必备
- 在 Qt4 中使用 C++11
- Hello Word ~ v0.2.2 背单词软件发布 -- By WHYPRO