2012-04-11 121 views
2

有人能指出我正確的方向,讓Qt連接到運行Socket.io服務器的Node.JS嗎?Qt連接到WebSockets服務器

我發現運行Qt作爲服務器的例子,但沒有讀取數據。

回答

3

在Qt中,至少有兩種方法。使用阻塞或非阻塞呼叫。如果使用非阻塞調用,則將您的信號「連接」到您正在使用的TcpSocket類的插槽。當某些數據到達時,您將觸發事件/回調。這不是一個完整的例子:

在您的.h文件中聲明

#include <QtNetwork> 
... 
class MyClient : public QObject 
{ 
    std::unique_ptr<QTcpSocket> tcpSocket_; 
... 
public slots: 
    void readTcpData(); 
... 

然後在.cpp文件做這樣的事情:

MyClient::MyClient() 
{ 
    tcpSocket_ = std::unique_ptr<QTcpSocket>(new QTcpSocket(this)); 
    connect(tcpSocket_.get(), SIGNAL(readyRead()), this, SLOT(readTcpData())); 
} 

void MyClient::readTcpData() 
{ 
    QByteArray rawData = tcpSocket_->readAll(); 
    QString textData(rawData); 
... do something with the received data. 
} 

要寫出你可以使用tcpSocket_-數據>寫(...)。 因此,只要數據到達,readReady()信號就會觸發readTcpData()函數,並且您知道有一些數據可用於從套接字讀取。 希望它有助於解決您的問題。祝你好運!

+0

這是怎麼處理握手和東西?它是自動的嗎? – James 2012-04-11 18:44:36

+0

@詹姆斯是的。 QTcpSocket處理。它有幾個函數,如connectToHost(...,...),waitForConnected(),close()等。非常便利。使用QtAssistant並搜索QTcpSocket,或訪問Qt網站。 – mantler 2012-04-11 18:51:43

+0

謝謝!我會看看並回復你。我已經upvoted暫時:) – James 2012-04-12 08:21:11

0

你可以看看QWebSockets,它使用Qt實現websockets。我也構建了客戶端和服務器socket.io類,這些類將很快開放。