Qt 连接到 WebSockets 服务器

Posted

技术标签:

【中文标题】Qt 连接到 WebSockets 服务器【英文标题】:Qt Connect to WebSockets server 【发布时间】:2012-04-11 16:41:15 【问题描述】:

谁能指出我正确的方向,让 Qt 连接到运行 Socket.io 服务器的 Node.JS?

我找到了将 Qt 作为服务器运行的示例,但没有一个会读回数据。

【问题讨论】:

【参考方案1】:

在 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_->write(...)。 因此,每当数据到达时,readReady() 信号就会触发 readTcpData() 函数,并且您知道有“一些”数据可从套接字读取。 希望它可以帮助并回答您的问题。祝你好运!

【讨论】:

如何处理握手之类的?是自动的吗? @James 是的。 QTcpSocket 处理那个。它有几个函数,如 connectToHost(...,...)、waitForConnected()、close() 等。非常便利。使用 QtAssistant 并搜索 QTcpSocket,或访问 Qt 网站。 谢谢!我去看看然后回复你。我暂时投了赞成票:) Qt 内部不处理握手吗?我无论如何都找不到重新连接给定的握手参数。 @James 每次我想重用 QTcpSocket 时,我总是使用所需的参数调用 connectToHost(..,..)。那么在连接时传递所需的主机和端口对您来说是个问题吗?【参考方案2】:

你可以看看QWebSockets,它使用Qt 实现了websockets。我还构建了客户端和服务器 socket.io 类,它们很快就会开源。

【讨论】:

以上是关于Qt 连接到 WebSockets 服务器的主要内容,如果未能解决你的问题,请参考以下文章

Qt5 WebSockets 测试应用程序未连接到测试服务

如何在NodeJS中代理websocket连接到其他websockets

连接到 websockets NodeJS Express 服务器时出错

OkHttp Websockets - 连接到 websocket 时添加一个主体

在 Viber 或 Telegram 等聊天应用程序中将客户端连接到服务器

.Net Core ClientWebSocket:无法连接到服务器