2017-02-04 11 views
0

ПроблемаQTcpSocket подключения результатов в UnknownSocketError с errorString «UnknownError»

Я не могу получить любую дополнительную информацию об этой ошибке:

QAbstractSocket::UnknownSocketError 

в Qt QAbstractSocket::SocketError предоставляет только базовые объяснения, что некоторые ошибки произошел

An unidentified error occurred.

enum value = -1

Вызов QTcpSocket :: errorString() предоставляет следующее:

"Unknown error" 

Существует one question об этом здесь на SO, но не дает реального решения для решения проблемы (и то, что было предложено, я сделал)

У меня absoltely не знаю, как для дальнейшего прогресса с этой ошибкой, поскольку каждый раз, когда мой клиент пытается подключиться (после вызова connectToHost()), я получаю эту ошибку.

Код:

// Сервер

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

Я также пошел на явно установить IP-адрес сервера на локальный и порт 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; 
    //... 
} 

Client отладочный вывод:

tcp error UnknownSocketError closed : "Unknown error" 

Любые советы?

p.s. Я искал опцию stacktrace/backtrace, ничего не нашел - если есть, пожалуйста, оставьте комментарий

+0

Существуют различные ошибки в программировании, и некоторые из них ничего не знают о причине. Некоторые ошибки могут быть обнаружены только путем проверки логики кода. Также вы можете поместить здесь [MCVE] (http://stackoverflow.com/help/mcve), и мы постараемся помочь –

+2

Также деталь 'new QTcpSocket (новый QObject());' выглядит странно –

+0

@VladimirBershov благодарит за предложение. Я изменил это на 'new QTcpSocket (this)' где 'this' является' QDialog'. И 'QDialog' косвенно наследует' QObject'. – KGCybeX

ответ

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(); 
} 
+0

Спасибо за это предложение, у меня была догадка, что это может быть что-то вроде этого, я буду реализовывать его и возвращаться с ответом – KGCybeX

 Смежные вопросы

  • Нет связанных вопросов^_^