gpt4 book ai didi

c++ - Qt和Node JS通过WebSockets进行网络通信

转载 作者:太空狗 更新时间:2023-10-29 22:59:54 30 4
gpt4 key购买 nike

我想将我的 Node JS 应用程序与 Qt(C++) 程序连接起来,我正在为 Node JS(服务器)使用 Socket.io,为 Qt 程序(客户端)使用 QWebSocket。

但在经历了所有的考验之后,我还是没有开始工作。它向我展示了客户端的错误:

QAbstractSocket::RemoteHostClosedError

从服务器端看,没有传入连接的迹象。

这是我的源代码:

Node JS 服务器:

var io = require('socket.io')(8082);

io.on('connection', function (socket) {
io.emit('this', 'Hey Welcome!');
console.log("New connection!");

socket.on('private message', function (from, msg) {
console.log('I received a private message by ', from, ' saying ', msg);
});

socket.on('disconnect', function () {
io.emit('user disconnected');
});
});

Qt C++ 客户端:

    #include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
{
ui->setupUi(this);

webSocket = new QWebSocket();

webSocket->open(QUrl(("ws://localhost:8082")));

connect(webSocket, SIGNAL(connected()), this, SLOT(isConnected()));
connect(webSocket, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(sslError(QList<QSslError>)));
connect(webSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(logError(QAbstractSocket::SocketError)));
connect(webSocket, SIGNAL(textMessageReceived(QString)), this, SLOT(newMessage(QString)));
connect(webSocket, SIGNAL(textFrameReceived(QString,bool)), this, SLOT(newMessageBit(QString,bool)));
}

Widget::~Widget()
{
delete ui;
}


void Widget::isConnected()
{
webSocket->sendTextMessage("Hello From Qt!!!");
}

void Widget::logError(QAbstractSocket::SocketError err)
{
qDebug() << "Error: ";
qDebug() << err;
}

void Widget::sslError(QList<QSslError> errors)
{
qDebug() << "SSLError: ";
qDebug() << errors;
webSocket->ignoreSslErrors(errors);
}


void Widget::newMessage(QString msg)
{
qDebug() << msg;
}

void Widget::newMessageBit(QString msg, bool isLast)
{
qDebug() << msg;
qDebug() << isLast;
}

我也从调试控制台得到这些错误(在运行时)

QSslSocket: cannot resolve TLSv1_1_client_method
QSslSocket: cannot resolve TLSv1_2_client_method
QSslSocket: cannot resolve TLSv1_1_server_method
QSslSocket: cannot resolve TLSv1_2_server_method
QSslSocket: cannot resolve SSL_select_next_proto
QSslSocket: cannot resolve SSL_CTX_set_next_proto_select_cb
QSslSocket: cannot resolve SSL_get0_next_proto_negotiated

最佳答案

虽然我迟到了,但如果有人也面临这个问题(不包括 ssl 错误),它可能会有用。首先,socket.io 与 Qt(或 c++、java、php 或任何其他语言)使用的标准 websockets 不兼容。如果您在服务器上使用 socket.io,那么您只能使用 socket.io 特定的客户端库,而不是标准的 websocket 库。

有几个其他语言的 socket.io 特定客户端库 -

Java: https://github.com/socketio/socket.io-client-java
C++: https://github.com/socketio/socket.io-client-cpp
Swift: https://github.com/socketio/socket.io-client-swift
Dart: https://github.com/rikulo/socket.io-client-dart
Python: https://github.com/miguelgrinberg/python-socketio
.Net: https://github.com/Quobject/SocketIoClientDotNet

关于c++ - Qt和Node JS通过WebSockets进行网络通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35438182/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com