- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在项目中使用QWebSockets。我写了一个小的“Hello World”示例来测试它如何工作。问题:我可以启动WebSocket服务器,但是客户端将无法连接到它。我的客户端进入QAbstractSocket::ConnectingState,但从未真正连接。
#if !defined(RAVI_SERVER_WEBSOCKETCLIENT_HPP)
#define RAVI_SERVER_WEBSOCKETCLIENT_HPP
//Qt includes
//WebSocket
#include <QtWebSockets/QWebSocketServer>
#include <QtWebSockets/QWebSocket>
//Util
#include <QObject>
#include <QDebug>
namespace ravi{
namespace server{
class WebSocketClient : public QObject{
public:
WebSocketClient(const QUrl &url, QObject* parent = nullptr);
private slots:
void handle_new_connection();
void handle_close_connection();
void handle_new_text_message();
void handle_ssl_errors(const QList<QSslError> &errors);
QWebSocket _socket;
};
}
}
#endif // RAVI_SERVER_WEBSOCKETCLIENT_HPP
#include "WebSocketClient.hpp"
ravi::server::WebSocketClient::WebSocketClient(const QUrl &url, QObject* parent):
QObject(parent),
_socket(){
connect(&_socket, QOverload<QAbstractSocket::SocketError>::of(&QWebSocket::error),
[=](QAbstractSocket::SocketError error){
qDebug() << "Error";
});
connect(&_socket, &QWebSocket::connected, this, &WebSocketClient::handle_new_connection);
connect(&_socket, &QWebSocket::disconnected, this, &WebSocketClient::handle_close_connection);
connect(&_socket, QOverload<const QList<QSslError>&>::of(&QWebSocket::sslErrors),
this, &WebSocketClient::handle_ssl_errors);
qDebug() << url.path();
qDebug() << url.port();
qDebug() << url.url();
qDebug() << url.host();
_socket.open(url);
qDebug() << _socket.state();
}
void ravi::server::WebSocketClient::handle_new_connection(){
qDebug() << "New Connection";
_socket.sendTextMessage(QStringLiteral("Hello, world!"));
connect(&_socket, &QWebSocket::textMessageReceived,
this, &WebSocketClient::handle_new_text_message);
}
void ravi::server::WebSocketClient::handle_close_connection(){
qDebug() << "Closed Connection";
}
void ravi::server::WebSocketClient::handle_new_text_message(){
qDebug() << "New Text Message";
}
void ravi::server::WebSocketClient::handle_ssl_errors(const QList<QSslError> &errors){
Q_UNUSED(errors);
qDebug() << "SSL";
_socket.ignoreSslErrors();
}
#include "source/server/WebSocketClient.hpp"
#include <iostream>
int main(int argc, char const *argv[])
{
ravi::server::WebSocketClient(QUrl("ws://127.0.0.1:8888"));
std::string line;
std::getline(std::cin, line);
}
#if !defined(RAVI_SERVER_WEBSOCKETSERVER_HPP)
#define RAVI_SERVER_WEBSOCKETSERVER_HPP
//Qt includes
//WebSocket
#include <QtWebSockets/QWebSocketServer>
#include <QtWebSockets/QWebSocket>
//Util
#include <QObject>
#include <QDebug>
namespace ravi{
namespace server{
class WebSocketServer : public QObject{
Q_OBJECT
public:
WebSocketServer(int port, QObject* parent = nullptr);
private:
void handle_new_connection();
void handle_close_connection();
void handle_text_message();
void handle_binary_message();
void handle_disconnect();
QWebSocketServer* _ws_server;
std::vector<QWebSocket*> _clients;
};
}
}
#endif // RAVI_SERVER_WEBSOCKETSERVER_HPP
#include "WebSocketServer.hpp"
ravi::server::WebSocketServer::WebSocketServer(int port, QObject* parent):
QObject(parent),
_ws_server(new QWebSocketServer("WebSocket Server", QWebSocketServer::NonSecureMode, this)){
if(_ws_server->listen(QHostAddress::Any, port)){
qDebug() << "Connect handlers";
connect(_ws_server, &QWebSocketServer::newConnection, this, &WebSocketServer::handle_new_connection);
connect(_ws_server, &QWebSocketServer::closed, this, &WebSocketServer::handle_close_connection);
}
if(_ws_server->isListening()){
qDebug() << "Still Listening";
}
}
void ravi::server::WebSocketServer::handle_new_connection(){
qDebug() << "New Connection";
QWebSocket *client = _ws_server->nextPendingConnection();
connect(client, &QWebSocket::textMessageReceived, this, &WebSocketServer::handle_text_message);
connect(client, &QWebSocket::binaryMessageReceived, this, &WebSocketServer::handle_binary_message);
connect(client, &QWebSocket::disconnected, this, &WebSocketServer::handle_disconnect);
_clients.push_back(client);
}
void ravi::server::WebSocketServer::handle_close_connection(){
qDebug() << "Closed Connection";
}
void ravi::server::WebSocketServer::handle_text_message(){
}
void ravi::server::WebSocketServer::handle_binary_message(){
}
void ravi::server::WebSocketServer::handle_disconnect(){
}
#include "source/server/WebSocketServer.hpp"
#include <iostream>
int main(int argc, char const *argv[])
{
auto ws_server = ravi::server::WebSocketServer(8888);
std::string line;
std::getline(std::cin, line);
return 0;
}
最佳答案
您有2个错误:
#include "source/server/WebSocketClient.hpp"
#include <QCoreApplication>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
ravi::server::WebSocketClient client(QUrl("ws://127.0.0.1:8888"));
return a.exec();
}
#include "source/server/WebSocketServer.hpp"
#include <QCoreApplication>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
ravi::server::WebSocketServer server(8888);
return a.exec();
}
auto ws_server = ravi::server::WebSocketServer(8888);
不会生成编译错误,因为作为WebSocketServer,QObject不应允许复制构造函数。
关于c++ - QWebSocket Hello World示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59895192/
我的 CS2 讲师给出了一个 java 正则表达式,用于检查单词是否重复: \\b(\\w+)\\s+\\1\\b 如何修改它来检查某个单词是否重复两次,如“hello hello hello”或“h
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
这个问题已经有答案了: printf anomaly after "fork()" (3 个回答) 已关闭 3 年前。 #include #include Void main() { Printf
我一直在分配以下作业来解释 3 个语句中发生的事情,但我无法弄清楚。 cout << ("hello" + 1); // ello cout << (*"hello") + 1; // 10
如何确定用户是否使用 hello.js 登录? 使用 Google Sign-In SDK,我可以使用 gapi.auth2.init() 注册回调,当设置 SDK 并准备好回答诸如“你是登录了吗?”
执行String S1 = "hello";后,JVM将在SCP中创建一个String对象,该对象将在value字段中保存一个字符数组,如 s1.value = {'h', 'e', 'l', 'l'
我正在 build gomobile Hello示例应用程序,但遇到以下问题:在 Xcode (7.1) 中打开应用程序后尝试构建并运行该应用程序时,出现错误“找不到 hello/Hello.h”文件
#coding=utf-8 '''Tkinter module''' from Tkinter import * import time root=Tk() t=Text(root,fg='red')
在C/C++中,下面两行代码有什么区别: char *str1="hello"; char *str2={"hello"}; 最佳答案 根据 2011 C 标准,条款 6.7.9 初始化,第 11
我对在 android studio 中导入 import.hello.Hello 时出错有疑问,如下图所示。请给我解决方案如何解决这个错误 最佳答案 请参阅此处 @Arpit Patel answe
hello/ 忽略文件夹结构中任何位置名为“hello”的所有文件夹 hello/* 仅忽略顶级文件夹“hello”。 这是为什么?请指出http://git-scm.com/docs/gitigno
请解释以下程序中发生了什么。 我在程序的开头和结尾检查了 strerror(errno) 返回的地址,并确认它每次都返回相同的地址。然后一旦确定这一点,在第一种情况下我继续将相同的地址分配给 ptr,
在整个互联网上你都会看到这个命令 alias hello='echo Hello' 是的,我知道以上是一个蹩脚的例子,但它不是重点。如果我执行它,它就会起作用。但是当我重新启动计算机时,它丢失了。为什
我正在学习 C++ 指针,而 -> 运算符对我来说似乎很奇怪。代替ptr->hello(); 可以写成 (*ptr).hello(); 因为它似乎也可以工作,所以我认为前者只是更方便方式。 是这样还是
这个问题在这里已经有了答案: About the changing id of an immutable string (5 个回答) 关闭4年前。 为什么 "hello"is "hello" 在 P
我需要Prolog的源代码,它用于与Weka连接,并且能够在Windows环境下使用Weka算法进行预测。我尝试通过 Java 连接,但无法使用 Java 和 Prolog 进行连接和预测。 最佳答案
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: Capitalize First Char of Each Word in a String Java 编写进行以下
当我在 ruby 控制台中运行以下示例时,我感到很惊讶。它们都产生相同的输出。 "hello".length 和 "hello" .length ruby
我创建了一个Hello World应用,系统生成了下面大部分的Android语言。在没有 System.out 语句的情况下运行应用程序时,模拟器中不会显示“Hello”。然后,使用 Eclipse
是的,所以我正在制作一个沼泽标准 Hello world 以确保 android 正常工作。这是我第一次使用 android,所以我正在设置环境。我按照以下程序制作了程序:http://develop
我是一名优秀的程序员,十分优秀!