- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个简单的服务器,它通过 QWebSocketServer 将一些数据传递给 javascript(与 qt doc 基本相同...)。
还有,请看这里:
void DebuggerServer::onNewConnection() {
puts("C");
QWebSocket *pSocket = m_pWebSocketServer->nextPendingConnection();
connect(pSocket, &QWebSocket::textMessageReceived, this, &DebuggerServer::processMessage);
connect(pSocket, &QWebSocket::disconnected, this, &DebuggerServer::socketDisconnected);
printf("onNewConnection");
m_clients << pSocket;
}
我尝试在此处 puts("C");
,但我什么也没得到。
在我的浏览器(最新版本的 chrome)中,如果我向服务器发送请求,我会得到一些信息,比如套接字正在连接。
我试过这些东西:关闭防火墙、更改端口、更改浏览器、更改编译模式。
我不确定这是否涉及这个问题,我正在通过 msvc15 和手动 moc header 编译这些代码。
此代码由 loadlibrary 注入(inject)到其他应用程序中。
服务器的完整源代码如下...
服务器.cpp
#include "Server.h"
#include "Inspector.h"
#include "Server.moc"
#include <QtCore/QCoreApplication>
const int port = 5642;
DebuggerServer *server;
void StartServer() {
server = new DebuggerServer(port);
}
QT_USE_NAMESPACE
DebuggerServer::DebuggerServer(quint16 port, QObject *parent) :
QObject(parent),
m_pWebSocketServer(Q_NULLPTR),
m_clients()
{
m_pWebSocketServer = new QWebSocketServer(QStringLiteral("mvInspector"),
QWebSocketServer::NonSecureMode,
this);
puts("A");
if (m_pWebSocketServer->listen(QHostAddress::Any, port))
{
puts("B");
connect(m_pWebSocketServer, &QWebSocketServer::newConnection,
this, &DebuggerServer::onNewConnection);
}
}
DebuggerServer::~DebuggerServer() {
m_pWebSocketServer->close();
qDeleteAll(m_clients.begin(), m_clients.end());
}
template<class T>
QString toStr(QList<T> y) {
QString rst;
for (T x : y)
rst += "\n" + QString(x);
return rst;
}
#define ASSERT_N(x) if (frame.length() != x) rst = "ERRON, wrong number of arguments."; else
void DebuggerServer::processMessage(QString message) {
QWebSocket *pSender = qobject_cast<QWebSocket *>(sender());
QStringList frame = message.split("\n");
QString rst;
rst += frame[0];
if (frame[0] == "getRootWindows") {
ASSERT_N(1)
rst += toStr(getRootWindows());
}
if (frame[0] == "getChildren") {
ASSERT_N(2)
rst += toStr(getChildren(frame[1].toInt()));
}
if (frame[0] == "getPropertyName") {
ASSERT_N(2)
rst += toStr(getPropertyName(frame[1].toInt()));
}
if (frame[0] == "getProperty") {
ASSERT_N(3)
rst += getProperty(frame[1].toInt(), frame[2].toStdString().c_str()).toBase64();
}
if (frame[0] == "getClassname") {
ASSERT_N(2)
rst += getClassname(frame[1].toInt());
}
if (frame[0] == "getClassname") {
ASSERT_N(2)
rst += getObjectname(frame[1].toInt());
}
printf(rst.toStdString().c_str());
pSender->sendTextMessage(rst);
}
void DebuggerServer::socketDisconnected()
{
QWebSocket *pClient = qobject_cast<QWebSocket *>(sender());
if (pClient) {
m_clients.removeAll(pClient);
pClient->deleteLater();
}
printf("socketDisconnected");
}
void DebuggerServer::onNewConnection() {
puts("C");
QWebSocket *pSocket = m_pWebSocketServer->nextPendingConnection();
connect(pSocket, &QWebSocket::textMessageReceived, this, &DebuggerServer::processMessage);
connect(pSocket, &QWebSocket::disconnected, this, &DebuggerServer::socketDisconnected);
printf("onNewConnection");
m_clients << pSocket;
}
服务器.h
#pragma once
#include <QtCore/qobject.h>
#include <QtWebSockets/qwebsocketserver>
#include <QtWebSockets/QWebSocket>
void StartServer();
class DebuggerServer : public QObject {
Q_OBJECT
public:
explicit DebuggerServer(quint16 port, QObject *parent = Q_NULLPTR);
virtual ~DebuggerServer();
private Q_SLOTS:
void onNewConnection();
void processMessage(QString message);
void socketDisconnected();
private:
QWebSocketServer *m_pWebSocketServer;
QList<QWebSocket *> m_clients;
};
主程序
#include <Windows.h>
#include "../Server.h"
BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved){
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
StartServer();
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
return TRUE;
}
最佳答案
最后,至少在 windows 10 (msvc) 上,它似乎是 Qt 5.4.1 的一个错误。
我可以让两个 Qt 应用程序通过 websocket 连接,但不能让 At 应用程序与普通浏览器连接。
所以,我使用另一个 websocket 库并尊重原始的 Qt websocket。
关于c++ - QWebSocketServer 仍在连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34511274/
我有一个应用程序,我应该在其中使用 QWebSocketServer 来接受和解析来自 Bokeh 应用程序的一些套接字消息。到目前为止我能够做到这一点,但现在我想将整个 QWebSocketServ
我正在编写一个简单的服务器,它通过 QWebSocketServer 将一些数据传递给 javascript(与 qt doc 基本相同...)。 还有,请看这里: void DebuggerServ
我调试用 C++/Qt 5.12.1 编写的控制台多线程应用程序。它在 Linux Mint 18.3 x64 上运行。 这个应用程序有 SIGINT 处理程序、QWebSocketServer 和
首先,我在我的安全 websocket 服务器应用程序上运行 valgrind 并发现了一个问题(在 Qt Memcheck 中我必须检查 “外部错误” 才能看到它)——一些字节 肯定丢失了 - 指向
我在 Qt5.8 中使用 QWebSocketServer。大多数 WebSocket 客户端都可以轻松连接到它,但其中一个会引发异常行为。 下面是我使用此客户端(客户端 10.8.0.1,服务器 1
我有一个 Qt 应用程序,它使用来自 Letsencrypt 的证书以安全模式 (SSL) 运行 QWebSocketServer。当我从 Windows 10 计算机上的 Chrome 或 Edge
我是一名优秀的程序员,十分优秀!