QTcpSocket 不发出错误信号

Posted

技术标签:

【中文标题】QTcpSocket 不发出错误信号【英文标题】:QTcpSocket does not emit error signal 【发布时间】:2015-11-28 22:37:10 【问题描述】:

我遇到了一个奇怪的问题。例如,当我尝试连接到127.0.0.1:8080 上的离线服务器时,套接字信号会发出“错误”,但当我连接到127.0.0.10:8080127.123.4.5:8080 时,信号不会发出错误。有什么问题以及如何捕获连接失败的错误?

代码 1:

remote_server = new Server(nickname, ip, port);

connect(remote_server, SIGNAL(error(QAbstractSocket::SocketError)),
        SLOT(connection_failed(QAbstractSocket::SocketError)));

remote_server->establish_connection();

代码 2:

master_socket = std::move(
            std::unique_ptr<QTcpSocket>(new QTcpSocket(nullptr))
            );
connect(master_socket.get(), SIGNAL(error(QAbstractSocket::SocketError)),
        SIGNAL(error(QAbstractSocket::SocketError)));

master_socket->connectToHost(ip.c_str(), port);
master_socket->waitForConnected(2000);

【问题讨论】:

如果您的服务器在环回接口(即 127.0.0.1/8)上侦听,那么您的两个地址(127.0.0.10、127.123.4.5)都将启动并可用。您能否提供“netstat -nap | grep LISTEN”输出来澄清您的问题? 【参考方案1】:

如果您的 tcp 套接字在另一个线程中(与 ui 线程分开),请使用

connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(displayError(QAbstractSocket::SocketError)) , Qt::DirectConnection);

Qt::DirectConnection

【讨论】:

以上是关于QTcpSocket 不发出错误信号的主要内容,如果未能解决你的问题,请参考以下文章

系统日志发出错误信息:应用程序-特定 权限设置并未向在应用程序容器 不可用 SID (不可用)中运行

Qt:QTcpSocket 的默认连接超时

为啥 QTcpSocket 不发出信号?

QTcpSocket readyRead() 信号多次发出

Qt - 当一个类中有多个 QTcpSocket 时,我如何知道哪个 QTcpSocket 发出了 readyRead 信号?

Mongoose .insertOne() 不工作(没有给出错误信息)