问题标签 [qlocalsocket]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1630 浏览

qt - Qt4.5:在 app.exec 之前使用基于事件循环的 localsocket

我正面临一个 Qt 的实际问题。我正在使用一个与 QLocalSocket 通信到另一个进程(管道/unix套接字)的类,我需要在其他事件发生之前进行通信,即在 app.exec() 启动之前(或者更准确地说,一旦应用程序启动)。我正在使用的类需要一个事件循环,所以如果我在事件循环开始之前调用类方法,它就不起作用。当事件循环准备好时,有什么方法可以开始?我想制作一个仅隐藏事件的窗口并在隐藏窗口构造函数中完成我的职责,并将此窗口稳定为顶层。

基本上,只要事件循环可用,我就需要启动这个本地套接字通信任务。

有任何想法吗?

谢谢你。

0 投票
0 回答
2341 浏览

qt - 持久性 Qt 本地套接字 IPC

我正在开发一个在本地服务器和客户端应用程序之间使用 IPC 的应用程序。它没有什么特别之处,因为它的结构类似于 Qt 文档和示例。

问题是客户端经常发送数据包并且从服务器本地套接字(NT 上的命名管道)连接/断开连接非常慢。所以我想要实现的是两个应用程序之间的“持久”连接。

客户端应用程序连接到本地服务器(QLocalServer)没有任何问题:

并以传统的 Qt 方式发送请求:

没问题。但诀窍在于服务器端的 readyRead() 信号。这是 readyRead() 处理槽的当前实现:

如果不设置_blocksize为零,我将无法接收更多数据,只能接收第一个块组(我希望整个块在没有分段的情况下到达,因为这是通过管道,但事实并非如此,请看图)。当然,我希望这种行为,因为 _blocksize 不再代表当前的流。好吧,重置 _blocksize 可以解决问题,但是我无法从客户端重新发送另一个数据包,而不会在套接字上获得越来越多的字节数组。我想要的是在 ReadRequest 中处理请求并接收下一个数据块,而无需连接/重新连接所涉及的应用程序。

也许我应该“调节”传入数据的速率?

非常感谢。

0 投票
0 回答
3160 浏览

qt - 具有多个客户端的 QLocalServer -- 正确处理

我试图让 IPC 在一台服务器之间工作,以接受来自 Qt 4.6 的多个客户端的请求。一切正常,除了底层命名管道没有被关闭,使 Qt 发出最大句柄到达消息 (62)。

由于我想接受多个客户端连接,因此我将 newConnections 处理到 QLocalServer 类,如下所示:

由于每次获得新连接时,从 QLocalServer::nextPendingConnection() 接收到的 QLocalSocket 指针都会被覆盖,因此我通过 SocketHandler 类管理数据请求,该类当然封装了一个 QLocalSocket 类:

这是类声明:

如上所述,问题是我无法在客户端请求时断开与服务器的连接。我试过 QLocalSocket::close, QLocalSocket::disconnectFromServer 没有运气。

我应该使用多线程解决方案吗?(我认为它不会解决问题)。

我正在考虑的另一个解决方案是提供 1:1 QLocalServer<-->QLocalSocket IPC 机制,而不是尝试处理 1:N。

提前致谢。

0 投票
1 回答
1012 浏览

qt - 将 QLocalSocket* 传递给需要 QIODevice* 的方法

也许我过于雄心勃勃,但我正在尝试编写一个服务器程序,它可以接受 QLocalSockets 和 QTcpSockets 上的连接。这个概念是有一个“nexus”对象,同时有一个 QLocalServer 和 QTcpServer 监听新连接:

...然后分开建立服务器对象的插槽,其构造函数采用指向 QIODevice 的指针。理论上,这应该可以工作,因为 QLocalSocket 和 QTcpSocket 都继承了 QIODevice。这是 newLocalConnection 插槽,例如:

问题是这不会编译,给出一个错误:

错误 C2664:“CalculationServer::CalculationServer(QIODevice *,QObject *)”:无法将参数 1 从“QLocalSocket *”转换为“QIODevice *”1> 指向的类型不相关;转换需要 reinterpret_cast、C-style cast 或 function-style cast

现在指向的类型显然不是无关的,在我的代码的其他地方,我对以下操作完全没有问题:

...所以谁能告诉我为什么编译器有这个问题?有没有办法让构造函数接受 QLocalServer*?我想有一个核选项让构造函数接受一个 void 指针和一个额外的变量来告诉它它正在发送什么,因此它可以将 void 指针重新转换为 QLocalSocket 或 QTcpSocket,但我觉得诉诸 reinterpret_cast 感到不舒服看起来它应该是一个简单的 C++ 多态性。

问候,

斯蒂芬。

0 投票
2 回答
719 浏览

php - 从 PHP 脚本绑定到套接字时遇到问题

我对 PHP 很陌生,所以这可能很简单。无论如何,我正在尝试在 PHP 脚本(由 Web 客户端激活)和本地进程(用 C++ 编写)之间创建双向通信。PHP 脚本应该向 C++ 进程发送一些信息,然后等待响应。我的问题是设置这种通信的唯一方法似乎是使用 socket_bind,但是当我这样做时,它会失败并出现“地址已在使用”错误。有问题的套接字文件 /tmp/sock 已经由持续运行的 C++ 进程创建(它不能由 PHP 脚本启动)。如果我使用 socket_connect 并且只是向 C++ 进程写一些东西,那效果很好;但我需要先绑定,然后才能从 PHP 脚本中收听该套接字。这是我的代码:

谢谢 -

0 投票
2 回答
1045 浏览

qt - 如何为 QLocalSocket 发出错误

我正在将“本地财富服务器”示例(来自 Qt 4.7.3)作为 Windows 上的服务实现。我想要的是当有人暂停服务时,本地服务器应该将错误通知给连接的本地套接字(本地财富客户端)。错误可能是 QLocalSocket::ServerNotFoundError。现在,如何从服务器示例中生成此错误。请查看我要生成此错误的以下代码。

0 投票
3 回答
5090 浏览

qt - 如果服务器以管理权限运行(Windows 7),则 QLocalSocket::connectToServer 失败并出现 QLocalSocket::SocketAccessError

在 Qt 4.8.1 的 Microsoft Windows 7 实现中出现以下问题:

QLocalServer(命名管道)正在等待客户端连接,它作为以管理权限运行的服务器应用程序(例如系统服务)运行。

如何允许非特权QLocalSocket 客户端连接到该服务器?连接尝试总是被拒绝,错误代码为 3 (QLocalSocket::SocketAccessError)。有解决办法吗?

编辑:正如我所发现的,解决方案是通过允许完全访问“每个人”Sid 来更改管道安全性。这里唯一的问题是,调用SetSecurityInfo总是失败并出现“拒绝访问”错误。首先,我们必须获得一个管道句柄。由于管道已经由 Qt 创建,我们将使用CreateNamedPipe.

即使NewAcl设置为 NULL,调用也会失败。那么什么会导致“拒绝访问”错误呢?

0 投票
1 回答
2358 浏览

c++ - QLocalSocket 到 QLocalServer 的消息在传输过程中被损坏

我还没有找到类似的问题,所以这里是:

我正在跨两个应用程序将 QString 从 QLocalSocket 发送到 QLocalServer 。接收(QLocalServer)应用程序确实收到了消息,但似乎编码完全错误。

如果我从 QLocalSocket(客户端)发送一个 QString = "x",我会在 QLocalServer 中得到一个外国(中文?)符号。我的代码实际上是从诺基亚开发者网站复制而来的

如果我通过 QDebug 打印出消息,我会得到“??”。如果我在消息框中触发它,则会打印中文字符。我尝试将收到的消息重新编码为 UTF-8、Latin1 等,但没有成功。

代码如下:

非常感谢任何帮助。

0 投票
2 回答
4007 浏览

qt - 无法启动 qlocalserver

我在 IPC 解决方案中使用 Qlocalsocket,我能够启动服务器并接受来自 QLocalSocket 客户端的连接并进行良好的通信,这没有问题。

但是我的问题发生在我杀死服务器的进程时,我不能让 QLocalServer 再次在同一个地方监听,我必须更改服务名称才能再次启动它,这在运行时环境中是不可能的。

那么如何让前面的流程释放那个名字呢?

这是我启动服务器的方式:

0 投票
0 回答
1107 浏览

c++ - QLocalServer IPC 客户端工作,服务器不工作

好吧,这似乎很棘手。我实现了一个 QLocalServer 来做一些 IPC。但它不会正常工作。客户端连接并告诉我他已连接。服务器......嗯......不是,这让我无法收到任何消息。

服务器实现如下所示:

输出服务器:

输出客户端:

没有运行服务器的输出客户端:

如果我在客户端连接时关闭服务器,则客户端输出:

所以客户端肯定是连接到服务器,但服务器的newConnection()信号永远不会被调用。我什至尝试自己检查与m_server->hasPendingConnections()...的连接,但这也返回错误...

[编辑]

我每 30 秒检查一次服务器状态:

输出: