2014-09-04 131 views
0

林無法使用任何這裏列出的QWebSockets客戶端的例子: http://qt-project.org/doc/qt-5/qtwebsockets-examples.html 的應用程序試圖打開本地主機URL,插座陷在QAbstractSocket :: ConnectingState和無法使用任何QWebSocket客戶基本的例子

qDebug()< < m_webSocket.error();

返回QAbstractSocket :: UnknownSocketError。當然,「連接」信號從不發射。 我有一個OSX獅子QT 5.3。我有OpenSSL 1.0.1i和

QSslSocket :: supportsSsl();

返回true。

我真的沒有想法,所以如果你有任何不愉快的事情會非常感激。

Thx提前。

回答

2

首先,我不認爲ssl是這種情況下的問題。

我剛剛運行的例子,它只是工作正常。這意味着可能存在以下常見問題之一(或者可能存在其他我不知道的問題)。

  • 本地端口號1234正被其他進程使用。這意味着,嘗試編輯EchoClient client(QUrl(QStringLiteral("ws://localhost:1234")));並用88889001等數字代替1234等問題應該可以解決。注意,在這種情況下,您必須在客戶端和服務器程序中更改端口。 (如果你不明白我在說什麼,請閱讀下一點以便充分理解。)
  • 在相應的服務器程序正在運行時運行客戶端程序。例如,當您運行echoclient時,應該保持echoserver運行。如果你使用的是windows或者linux,你可以打開兩個Qt Creator進程,然後運行echoserver,然後運行echoclient。如果你在Mac中,你不能創建兩個Qt Creator實例(至少在優勝美地,我不知道osx獅子)。您必須運行echoserver(並且不要關閉控制檯),然後打開echoclient項目並將echoclient設置爲活動項目並運行。

  • (雖然不太可能)如果你打開一個項目,從網站複製cpp文件並在您的項目粘貼,然後編譯(而不是下載它形成你的Qt創建者的實例選項卡),然後你.pro文件的配置可能會丟失。只需在項目的.pro文件中添加websocketsQT += core即可。

如果這些都沒有的情況下,那麼你可以讓我知道,你可以嘗試在這種情況下,在Qt forum發佈了。

1

這裏是我的代碼工作的一個例子:

CSocketClient : public QWebSocket 
{ 
    Q_OBJECT 
public: 
    CSocketClient(); 

protected slots: 
    void SL_Connected(); 
    void SL_Disconnected(); 
}; 


CSocketClient::CSocketClient() : QWebSocket("MyApplication") 
    { 
    connect(this, &QWebSocket::connected, this, &OSocketWebGenogramClient::SL_Connected); 
    connect(this, &QWebSocket::disconnected, this, &CSocketClient::SL_Disconnected); 
    open(QUrl("ws://localhost:45002")); 
    } 

void 
CSocketClient::SL_Connected() 
    { 
    qDebug() << "Connected to server on port" << localPort(); 
    } 

void 
CSocketClient::SL_Disconnected() 
    { 
    }