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);

 

理解可能有偏差,但问题能够得到解决。

 

 

 


 
posted @   勇敢蘑菇  阅读(1435)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示