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

 

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

 

 

 

 
 
 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM