现在我有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的新手,所以不知道属于哪个部分。
非常感谢!