QTcpSocket connecting results in UnknownSocketError with errorString “UnknownError”

匿名 (未验证) 提交于 2019-12-03 01:45:01

问题:

Problem

I am unable to get any further information regarding this error:

QAbstractSocket::UnknownSocketError 

The QT QAbstractSocket::SocketError provides only a basic explanation that some error has occurred

An unidentified error occurred.

enum value = -1

Calling QTcpSocket::errorString() provides this:

"Unknown error" 

There is one question regarding this here on SO but provides no real solution to solving the issue (and what was suggested I have done)

I have absoltely no idea how to further progress with this error, since each time my client attempts to connect (after calling connectToHost()) I get this error.

Code:

//Server

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

I also went on to explicitly set the server ip to localhost and port 5000, but without success.

//Client

//... 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 debug output:

tcp error UnknownSocketError closed :  "Unknown error" 

Any advice?

p.s. I looked for some stacktrace/backtrace option, didn't find anything - if there is, please leave a comment

回答1:

It is wrong to check an error immediately after the connectToHost(), because this is not a complete action, and the errorString() will always return "Unknown error". You have to call the QAbstractSocket::waitForConnected() method like this:

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

Or you can don't call the waitForConnected() and asynchronously wait while the signal connected() will be emitted:

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!