QTcpSocket连接导致UnknownSocketError with errorString" UnknownError"

时间:2017-02-04 16:17:24

标签: qt sockets qtcpsocket qtcpserver qabstractsocket

问题

我无法获得有关此错误的任何进一步信息:

QAbstractSocket::UnknownSocketError

QT QAbstractSocket::SocketError仅提供了发生错误的基本解释

  

发生了一个未识别的错误。

     

枚举值= -1

调用QTcpSocket :: errorString()提供了这个:

"Unknown error"

此处有关于此问题的one question,但没有提供解决问题的真正解决方案(以及我所做的建议)

我绝对不知道如何进一步推进此错误,因为每次我的客户端尝试连接时(在调用connectToHost()之后)我都会收到此错误。

代码:

//服务器

//...
if (tcpServer.listen(QHostAddress().AnyIPv4, 5000)) {
    qDebug() << "tcpserver started on port : 5000";
}
else{
    qDebug() << "tcpserver failed to start";
}
//...

我还继续明确地将服务器ip设置为localhost和port 5000,但没有成功。

//客户端

//...
tcp_con = new QTcpSocket(new QObject());
tcp_con->connectToHost("127.0.0.1", 5000);

switch (tcp_con->error()) {
    //...
    case QAbstractSocket::UnknownSocketError:
    qDebug() << "tcp error UnknownSocketError closed : " << tcp_con->errorString();
    return;
    //...
}

客户端调试输出:

tcp error UnknownSocketError closed :  "Unknown error"

有什么建议吗?

P.S。我找了一些stacktrace / backtrace选项,没找到任何东西 - 如果有的话,请发表评论

1 个答案:

答案 0 :(得分:2)

connectToHost()之后立即检查错误是错误的,因为这不是一个完整的操作,errorString()将始终返回“未知错误”。你必须像这样调用QAbstractSocket::waitForConnected()方法:

tcp_con->connectToHost("127.0.0.1", 5000);
if (tcp_con->waitForConnected(1000))
    qDebug("Connected!");

或者您不能调用waitForConnected()并在发出信号connected()时异步等待:

connect(tcp_con, SIGNAL(error(QAbstractSocket::SocketError)),
        this, SLOT(onError(QAbstractSocket::SocketError)));
    connect(tcp_con, SIGNAL(connected()),
        this, SLOT(onConnect()));
//...
void MyClass::onConnect()
{
    qDebug() << "Connected!";
}

void MyClass::onError(QAbstractSocket::SocketError)
{  
    QTcpSocket* sock = (QTcpSocket*)sender();
    qDebug() << "Socket error:" << sock->errorString();
}