问题标签 [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.
c++ - QLocalSocket 不发送任何内容
好吧,我仍在尝试让 IPC 通过 QLocalSocket 运行。显然我的套接字连接了,连接被接受了,但是当我尝试发送一些东西时
我没有得到回应...服务器的套接字什么也不做。
服务器的读取实现:
输出:
客户:
服务器:
套接字的 readReady() 信号永远不会发出,所以我决定使用
...但显然这也不起作用。waitForReadyRead
在客户端功能之后立即触发write
,我认为这意味着它现在可以阅读了......
[编辑]auto conn = connection(...)
用于调试,检查它们是否正确连接....它们确实
c++ - QLocalSocket 真的用于命名管道吗
根据 Qt 文档,如果我们想在 Windows 上使用命名管道,我们可以使用 QLocalSocket。我正在用 Qt 编写服务器和客户端程序。如果我尝试使用 WIN32 API 在管道中写入一些消息,Qt 客户端不会显示它。此外,如果客户端再次使用 WIN32 API 写入,Qt 服务器不会回显发送的消息。QLocalSocket 真的推荐用于命名管道吗?
这是 Win32 服务器代码
这是 Win32 客户端:
这是 Qt 服务器端
这是 Qt 客户端
c++ - QLocalSocket::disconnectFromServer() 在 Windows 的 Qt5 中重新进入事件循环之前不会断开套接字
我为 Qt5 编译了一个程序,现在它具有不同的运行时行为。
在 Qt5 中,套接字在重新进入事件循环之前不会断开连接,即使我使用waitForDisconnected()
.
例如这段代码:
将给出以下输出:
但是在我收到消息之前,套接字本身不会被删除Started QEventLoop...
- 我知道这是因为我从另一个等待套接字与另一端断开连接的应用程序监视它。
当使用 Qt4 编译时,相同的代码可以正常工作,套接字在waitForDisconnected()
返回之前断开连接。在 Qt5waitForDisconnected()
返回时声称套接字已断开连接,而实际上并没有。
我的 Qt 版本是 5.1.1。
c++ - Qt 5.2:QLocalServer 接收重复的 readyRead 信号
我对设计一个简单的 QLocalServer-QLocalSocket IPC 系统的问题感到困惑。
QLocalServer 等待新连接并将信号连接到正确的插槽。
这个 readAll 是有意完成的,以检查我如何按顺序获得两个 readyRead 信号(来自同一个插槽指针,我验证了这一点)。
客户端操作相当简单:
_socket->write(data)调用会在服务器上触发重复的 readyRead(即使服务器端已通过 ReadAll 调用读取了所有数据)。
任何迹象表明我应该在哪里看?
pipe - QLocalSocket - 共享一个套接字
我正在创建一个(linux)应用程序并想使用命名套接字。我相信 QLocalSocket 实现了这一点。我遗漏了一些非常基本的东西——这使得文档很难理解:
QLocalSocket(Linux中的本地域套接字)是全双工的吗?那么我的应用程序会读取和写入同一个套接字以与另一个应用程序通信吗?
如果多个客户端想与我的应用程序交谈,他们可以安全地打开同一个套接字/文件吗?如果是这样,我的应用程序(或其他应用程序)如何区分哪个应用程序说了什么?所有传输都是交错的吗?
multithreading - QSharedMemory 和 QLocalSocket:性能问题
我正在寻找 Windows 上 Qt (v5.3) 中具有高性能的 IPC。在我的最终情况下,我将有 3 个(或更多)生产者进程和一个消费者进程。
在此之前,我使用 1 个生产者线程和 1 个消费者线程进行了一些测试,同时使用了QLocalSocket/QLocalServer(示例)和QSharedMemory(示例),我很惊讶时间是可比的。
特别是我得到了以下结果(从第一条消息到收到最后一条消息):
发送/写入 1000 字符串消息:QSharedMemory:1020ms,QLocalSocket 1010ms 发送/写入 5000 字符串消息:QSharedMemory:5010ms,QLocalSocket 5090ms 发送/写入 10000 字符串消息:QSharedMemory:10097ms,QLocalSocket 10850ms
问题是:
- 您是否同意这个结果,或者我的代码中可能有错误?
- Qt 中是否有一些性能更好的 IPC 方法?
提前致谢。阿瑟86
2014 年 10 月 23 日更新
我花了更多时间来调查这个疑问,并找到了合理的回应。我发现线程之间的上下文切换使用了先前时间的很大一部分。特别是,如果我删除 Thread::msleep(0); 在每个周期结束时,我能够达到更低的计算时间。
例如。
- 1000 字符串消息:对于 QLocalSocket 和 QSharedMemory 都小于 100 毫秒
- 5000 字符串消息:对于 QLocalSocket 和 QSharedMemory 都小于 300 毫秒
- 10000 字符串消息:对于 QLocalSocket 和 QSharedMemory 都小于 1000 毫秒
我认为删除Thread::msleep(0)
不是一个好主意。不是吗?你能建议我一些方法来提高睡眠指导的表现吗?
c++ - 检测 QLocalSocket 关闭
所以我有 2 个 QT 应用程序,一个运行 QLocalServer 并监听连接。在另一个应用程序(客户端)连接上,它初始化一个 QLocalSocket。在客户端,我只是连接到服务器。客户端有什么方法可以检测服务器何时关闭?现在,如果我关闭服务器并且客户端继续运行,当我尝试刷新套接字时会收到 SIGPIPE 异常。
c++ - 使用 Qt 在自定义位置创建本地套接字
我正在使用 QLocalServer 创建一个本地套接字,以便其他进程可以连接到我的 Qt 应用程序。我的问题是 Qt 似乎/tmp/
很想在XDG_RUNTIME_DIR
.
如果我使用:
然后在 中创建套接字/tmp/
,但是如果我尝试指定绝对或相对路径,那么 Qt 似乎根本不会费心创建套接字。
编辑:仔细检查后,设置套接字文件权限的 setSocketOptions(QLocalServer::UserAccessOption) 是阻止我指定套接字路径的原因。注释掉这一行会消除限制。但这肯定不是 Qt 的预期行为方式吗?
c++ - 当字节不可用时,QLocalServer 发出 readyRead
我正在尝试在本地 OSX 10.11 中启动 QLocalServer。
我有客户端尝试循环连接到服务器:
当此代码运行时,我尝试在另一个应用程序中启动 QLocalServer:
为什么调用 readyRead 时,字节不可用?
linux - 是否可以从 QLocalSocket 连接中获取 PID?
我正在构建一个客户端/服务器架构,其中客户端进程可以使用本地 Unix 域套接字连接到服务器。
服务器进程在 Qt 中实现,使用 QLocalServer 和 QLocalSocket 来维护服务器端的连接。
有没有办法直接从连接信息中获取连接客户端进程的PID?我不想相信客户端通过套接字连接告诉我它的 PID,因为客户端可能会尝试欺骗另一个进程的 PID。