QT TCPServer 监听不到newConnection
在学习QT的时候,撸一下前辈开放的教程代码。使用TcpServer的时候,出现无法监听newConnetion的情况。
代码如下:
void MainWindow::on_btnStart_clicked() 2 { 3 if (!tcpServer.listen(QHostAddress::Any,ui->txtPort->text().toInt())) 4 { 5 ui->labCount->setText(tr("提示:发生错误(%1)").arg(tcpServer.errorString())); 6 tcpServer.close(); 7 return; 8 } 9 connect(&tcpServer,SIGNAL(newConnection()),this,SLOT(AcceptConnection())); 10 11 ui->btnStart->setEnabled(false); 12 ui->btnSend->setEnabled(true); 13 ui->labCount->setText(tr("提示:正在监听")); 14 } 15 16 void MainWindow::AcceptConnection() 17 { 18 tcpServerConnection = tcpServer.nextPendingConnection(); 20 connect(tcpServerConnection,SIGNAL(readyRead()),this,SLOT(ReadMyData())); 22 23 tcpServer.close(); //不再连接其他客户端 24 ui->labCount->setText(tr("提示:客户端连接成功")); 25 }
按照网上说的,试过把防火墙关闭重启,仍然无法正常监听,现象就是客户端显示连接成功,无法收到newConnection的signal。
最后发现是connect出现问题,把开启监听成功后的connect改成如下:
connect(&tcpServer, &QTcpServer::newConnection, this, &MainWindow::AcceptConnection);
则问题得到解决。
我的理解是:网上能搜到的代码都是5.0之前的版本,使用SIGNAL()和SLOT()搭配确定信号和处理函数的对应;
5.0之后connect函数推荐使用上面这种情况,相对前面的方式,显式的表明信号函数的发送主题和槽函数的归属。这里始终得不到newConnection,应该就是信号发送的主体可能出现问题。
同样的,后面也出现了相同的无法收到readyRead信号的问题。
connect(tcpServerConnection,SIGNAL(readyRead()),this,SLOT(ReadMyData()));
更改成如下问题同样得到了解决。
connect(tcpServerConnection,&QTcpSocket::readyRead ,this, &MainWindow::ReceiveData);
理解可能有偏差,但问题能够得到解决。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示