Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何捕获websocket连接错误_C++_Qt_Websocket - Fatal编程技术网

C++ 如何捕获websocket连接错误

C++ 如何捕获websocket连接错误,c++,qt,websocket,C++,Qt,Websocket,我正在从Qt/c++客户端打开一个url m_webSocket = new QWebSocket(); m_webSocket->open("wss://192.123.1.44:8087"); 我想捕捉任何连接错误。我该怎么做? 我已连接到signalQWebSocket:error(QAbstractSocket::SocketError),但即使我的服务器未运行,也从未触发它 编辑: 我正在连接错误信号,如下所示 m_webSocket = new QWebSocket(); c

我正在从Qt/c++客户端打开一个url

m_webSocket = new QWebSocket();
m_webSocket->open("wss://192.123.1.44:8087");
我想捕捉任何连接错误。我该怎么做? 我已连接到signal
QWebSocket:error(QAbstractSocket::SocketError)
,但即使我的服务器未运行,也从未触发它

编辑: 我正在连接错误信号,如下所示

m_webSocket = new QWebSocket();
connect(m_webSocket, SIGNAL(error(QAbstractSocket::SocketError error)), this, SLOT(onWebSocketError(QAbstractSocket::SocketError error)));
m_webSocket->open(url);
这似乎不起作用。

在打开插座之前,先连接QWebSocket信号

QWebSocket* pWebSocket = new QWebSocket;
connect(pWebSocket, &QWebSocket::error, [=](QAbstractSocket::SocketError error)
{
    // Handle error here...
    qDebug() << pWebSocket->errorString();
}

pWebSocket->open("wss://192.123.1.44:8087");
由于返回包含的,您可以检查连接调用的返回,以确保找到有效的信号和插槽,并提供有效的参数:-

// Old-style connection
if(!connect(m_webSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onWebSocketError(QAbstractSocket::SocketError))) )
{
    qDebug() << "Failed to connect to QWebSocket::error" <<  endl;
}
//旧式连接
如果(!connect(m_webSocket,SIGNAL(error(QAbstractSocket::SocketError)),则此插槽(onWebSocketError(QAbstractSocket::SocketError)))
{
qDebug()如中所述:

注意:信号错误在此类中被重载。要使用函数指针语法连接到此信号,Qt提供了一个方便的助手来获取函数指针,如本例所示:

connect(webSocket,QOverload::of(&QWebSocket::error),
[=](QAbstractSocket::SocketerError错误){/*…*/});

当然,您可以连接到普通的lambda函数,而不是lambda函数,但是
QOverload
部分很重要。

谢谢您的回答。我已经编辑了我的问题。请看一看,让我知道这是否是处理错误信号的正确方法。是的,但是如果您使用的是Qt 5,最好使用新的连接语法,它将如果错误,则在编译时出错;connect(m_webSocket,&QWebSocket::error,this,&MyClass::onWebSocketError);我已连接到编辑中提到的错误信号。仍然无法捕获错误。如果您正在使用Qt信号和插槽宏,请检查连接调用的返回。我仍然无法解决问题。这是我需要的魔法。我无法让编译器停止抱怨。谢谢。非常欢迎!
// Old-style connection
if(!connect(m_webSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onWebSocketError(QAbstractSocket::SocketError))) )
{
    qDebug() << "Failed to connect to QWebSocket::error" <<  endl;
}
connect(webSocket, QOverload<QAbstractSocket::SocketError>::of(&QWebSocket::error),
[=](QAbstractSocket::SocketError error){ /* ... */ });