通过TCP传输数据时的值更改

时间:2015-01-10 23:12:39

标签: c++ qt tcp

我有一个使用QTcp-Classes用c ++编写的TCP服务器和TCP客户端。现在我遇到的问题是,有时服务器会发出0,但客户端会收到1。一旦出现这个问题,我就必须重新启动所有内容以纠正这个问题 负责告诉我数据的最低级功能是:

客户端

void Client::readData()
{
    QDataStream in(tcpSocket);
    in.setVersion(QDataStream::Qt_5_0);
    if (blockSize == 0) {
        if (tcpSocket->bytesAvailable() < (int)sizeof(quint16))
            return;

        in >> blockSize;
    }
    if (tcpSocket->bytesAvailable() < blockSize)
    {
        qDebug() << tcpSocket->bytesAvailable() << ' ' << blockSize;
        return;
    }
    in >> data;
    blockSize = 0;
    //qDebug() << "Client got new data!";
    qDebug() << data.first << " " << data.second.toInt();
    emit Client::gotData(data);

}

服务器

void Server::sendData(QPair<QString, QVariant> data)
{
//! [5]
    //QString data = "";
    QPair<QString, QVariant> send_data = data;
    QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_5_0);
    out << (quint16)0;
    out << send_data;
    out.device()->seek(0);
    out << (quint16)(block.size() - sizeof(quint16));
    if(Server::clientConnection != NULL)
    {
        qDebug() << "New Connection: " << Server::clientConnection->peerAddress().toString() << " on Port: " << Server::clientConnection->peerPort();
        QVariant ipAddr_QVar(Server::clientConnection->peerAddress().toString());
        qDebug() << "New qvariant: " << ipAddr_QVar;

        clientConnection->write(block);
    }
    else
        qDebug() << "No connection!";
}

在上述函数中未定义的每个变量都在相应的类中定义 sendData() - 函数通过(Signal-Slot-mechanism)调用:

void controller::positionChanged()
{
    QVariant tmp(0);
    qDebug() << "Position changed, stepper stopped " << tmp.toString() << "!";
    emit sendDataMain(qMakePair(QString("STP"), tmp));
}

positionChanged() - qDebug() - 函数打印出0,但有时readData函数会打印一个1
到目前为止我做了什么:
我试着用wireshark查看tcp-data,但是我无法读取QDataStreams ...
我尝试使用调试器,但随后出现相同的情况,调试器告诉我与qDebug()相同的情况。所以,目前我不知道我做错了什么,也许这里有人可以帮助我?

0 个答案:

没有答案