关于套接字客户端重新连接到QTcp中的服务器的读值问题

时间:2019-07-12 14:20:46

标签: c++ tcp qt5

现在我有2个客户端(1和2)和一个服务器,基本上每个客户端都有一个滑块和一个LCD显示屏:

1)我将调整客户端1 上的滑块,然后将值发送到服务器,

2)服务器将从滑动条接收值,然后将其发送到所有2个连接的客户端,客户端2上的滑动条将被动地将接收到的值设置为该值,同时将LCD显示器设置为该值。

3)客户端1也将从服务器接收值,并且滑块的值也将被设置为接收值。

3)总之,如果我在2个客户端中的任何一个上调整滑动条,则它们将同时显示相同的值(滑动条和LCD)。

问题是:

如果我将2个客户端连接到服务器,然后调整任何客户端的滑块值,则另一个客户端将显示相同的值,但是如果我断开所有客户端并再次将它们重新连接到服务器,则进行调整滑动条,它们都将显示“ 99”,如果再次重复并连接和断开连接,则将显示“ 9999”,我发现socket-> readAll()函数似乎已读取所有先前的值。

这是我在服务器中接收数据的代码

void TcpClientSocket::receivedata()
{
    int length = 30;
    QByteArray array = this->readAll();
    QString msg = array;
    emit updateserver(msg, length);
}

这是客户中的相关部分


// if I adjust slider, below function will send the value to sever
connect(slider,&QSlider::valueChanged,this,[=](){
            value=slider->value();
            val=QString::number(value);
            ui->LCD->display(val);
            tcpsocket->write(val.toUtf8().data());});

connect(tcpsocket, &QTcpSocket::readyRead, this, &TcpClient::slotreceive);

void TcpClient::slotreceive()
{
    num = tcpsocket->readAll();
    slider->setValue(num.toInt());
}

有人可以给我一些建议吗,当我执行断开连接/重新连接操作时,如何只接收该值而不是以前的所有值? 我知道它应该与IODevice一起使用,但是由于我是QT tcp的新手,所以不知道属于哪个部分。

非常感谢!

0 个答案:

没有答案