QTcpSocket的一次奇异之旅

客户端与服务度取得连接,然后,
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);
}

软件结果:
Client

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值