【问题标题】:QLocalSocket - sharing a socketQLocalSocket - 共享一个套接字
【发布时间】:2014-03-09 19:51:43
【问题描述】:

我正在创建一个 (linux) 应用程序并希望使用命名套接字。我相信 QLocalSocket 实现了这一点。我遗漏了一些非常基本的东西——这使得文档很难理解:

  1. QLocalSocket(Linux 中的本地域套接字)是全双工的吗?那么我的应用会读取和写入同一个套接字以与另一个应用通信吗?

  2. 如果多个客户端想要与我的应用程序通信,他们可以安全地打开同一个套接字/文件吗?如果是这样,我的应用程序(或其他应用程序)如何区分哪个应用程序说了什么?所有传输都是交错的吗?

【问题讨论】:

    标签: pipe unix-socket qlocalsocket


    【解决方案1】:

    您似乎缺少的元素是 QLocalServer 类。

    首先,您的应用程序创建一个 QLocalServer 实例并通过运行 listen() 方法来启动它。这会在 Windows 上创建一个命名管道 (\.\pipe[name]) 或在 Linux 上创建一个本地域套接字文件(通常是 /tmp/[name])。然后您的其他应用程序可以使用QLocalSocket 使用 connectToServer() 连接到服务器应用程序并根据需要进行通信。

    【讨论】:

    • 假设有 2 个其他应用程序连接到此 QLocalSocket。我的服务器应用程序如何区分什么信息凸轮和什么应用程序? QLocalSocket 是否为每个连接启动一个线程?
    • QLocalServer 和 QLocalSocket 可以分别被认为与 QTcpServer 和 QTcpSocket 相同。如果您希望您的“服务器”应用程序知道哪个“客户端”应用程序已连接/正在向其发送数据,那么当客户端建立连接时,您将需要某种形式的从客户端到服务器的描述消息。您可以在服务器上对incomingConnection 进行线程处理(我建议查看Qt 文档中的幸运饼干示例)
    • 我现在看到了我的套接字文件(在 /tmp/myserver 中) - 我该如何测试它?我看到了适用于 linux 的 socat 程序,但参数有问题
    猜你喜欢
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多