为什么 QT QTcpSocket 信号没有按预期工作

问题描述

我有一个简单的类,

void socketTest::test()
{
    socket = new QTcpsocket(this);

    socket->setReadBufferSize(1000000);
    connect(socket,SIGNAL(connected()),this,SLOT(connected()));
    connect(socket,SIGNAL(disconnected()),SLOT(disconnected()));
    connect(socket,SIGNAL(readyRead()),SLOT(readyRead()));
    connect(socket,&QTcpsocket::bytesWritten,&socketTest::bytesWritten);

  
    qDebug()<<"Connecting...";

    socket->setProxy(QNetworkProxy::noproxy);
    socket->connectToHost("192.168.1.20",5017);

    if(!socket->waitForConnected(1000)){
         qDebug()<<"Error..." <<socket->errorString();
    }
}

这里是插槽

void socketTest::connected(){
    qDebug()<<"\r\nConnected";

    socket->write("Hello world");
}

void socketTest::disconnected(){
    qDebug()<<"\r\ndisconnected";
}

void socketTest::bytesWritten(qint64 bytes){

    qDebug()<<"\r\nyeah ha";
    qDebug()<<"We wrote" << bytes;
}

qint64 readBytes = 0;
void socketTest::readyRead(){
    qDebug()<<"\r\nReading...."<<readBytes;
    QByteArray Ba;
    Ba = socket->readAll();
    readBytes+= Ba.size();

    qDebug()<< Ba.size();
}

问题是,当我运行代码时,一切正常,我会将 11 个字节写入服务器,服务器有一个按钮,如果我打开它,它将不断向客户端发送大量数据,直到我把它关掉,所以如果我注释掉

 socket->write("Hello world");

当 socket->write 被注释时,我会得到常量数据

enter image description here

客户端会连续获取所有数据,但是当我向服务器写一些东西时(当 socket->write 没有被注释时),当我打开传输数据时,它只会得到几个数据包,

enter image description here

我用hercules_3-2-8(https://www.hw-group.com/software/hercules-setup-utility)测试了服务器,服务器可以连续接受读写数据,

所以我做错了什么,所以如果我也向服务器写一些东西,readyRead 在几个数据包后不会得到任何信号。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)