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();
}
Другие вопросы по тегам