QTcpSocket-соединение приводит к UnknownSocketError с ошибкой String "UnknownError"
проблема
Я не могу получить дополнительную информацию об этой ошибке:
QAbstractSocket::UnknownSocketError
QT QAbstractSocket:: SocketError предоставляет только базовое объяснение того, что произошла какая-то ошибка
Произошла неопознанная ошибка.
значение enum = -1
Вызов QTcpSocket::errorString() обеспечивает это:
"Unknown error"
Есть один вопрос, касающийся этого здесь, на SO, но не дает реального решения для решения проблемы (и что было предложено, я сделал)
Я совершенно не представляю, как дальше продвигаться с этой ошибкой, поскольку каждый раз, когда мой клиент пытается подключиться (после вызова connectToHost ()), я получаю эту ошибку.
Код:
// Сервер
//...
if (tcpServer.listen(QHostAddress().AnyIPv4, 5000)) {
qDebug() << "tcpserver started on port : 5000";
}
else{
qDebug() << "tcpserver failed to start";
}
//...
Я также продолжал явно устанавливать ip сервера на localhost и порт 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"
Любой совет?
ps Я искал какой-либо вариант stacktrace / backtrace, не нашел ничего - если есть, пожалуйста, оставьте комментарий
1 ответ
Неправильно проверять ошибку сразу после 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();
}