问题
我无法获得有关此错误的任何进一步信息:
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选项,没找到任何东西 - 如果有的话,请发表评论
答案 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();
}