2017-03-09 91 views
2

我一直在試圖設置一個使用Qt websocket類的websocket客戶端。 不幸的是,我還沒有能夠完成第一步:將我的客戶端連接到服務器。QWebSocket「未知錯誤」

我確定連接是可能的,因爲Go ws websocket client和C++ easywsclient library都可以連接並與服務器連接。

我的代碼的相關部分如下:

QWebSocket socket; 
    socket.open(QUrl("ws://localhost:9999")); 
    qDebug() << socket.error() << socket.errorString(); 

運行程序時,我得到以下(無用)消息:

QAbstractSocket::UnknownSocketError "Unknown error" 

有什麼辦法,以澄清錯誤和/或解決問題?

P.S.雖然easywsclient庫可以連接並與服務器連接,但它只做一個邊緣工作,這就是爲什麼我更願意使用Qt類。

回答

1

沒有錯誤。 open()是異步的。將connected(),disconnected(),error(),textMessageReceived()信號連接到QObject派生對象的插槽。或者使用一些lambdas如果它是一個非常基本的應用程序:

QWebSocket socket; 
QObject::connect(&socket, &QWebSocket::connected, [] { qDebug() << "connected"; }); 
QObject::connect(&socket, &QWebSocket::error, [](QAbstractSocket::SocketError error) { qDebug() << error; }); 
socket.open(QUrl("ws://localhost:9999")); 
+0

謝謝,我沒有意識到open()是異步的。我已經用lambda插槽以及實際正確的插槽嘗試了您的代碼,但我的客戶端仍無法連接到服務器。使用Wireshark進行調試後,我發現在初次握手之後,客戶端立即發送FIN,ACK並終止連接。任何想法可能會發生在這裏? – nov1943

+0

更新:奇蹟般的websockets已經開始工作。看起來端口改變了訣竅。這是一個隻影響我的地方性問題。非常感謝您的幫助:) – nov1943