【问题标题】:not able to start qlocalserver无法启动 qlocalserver
【发布时间】:2013-03-16 03:20:04
【问题描述】:

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

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

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

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

m_server = new QLocalServer(this);
if (!m_server->listen("serviceUniqueName")) {
    qDebug() << "Not able to start the Server";
    return;
}

【问题讨论】:

    标签: qt ipc qlocalsocket


    【解决方案1】:

    正如 Amartel 指出的,如果服务器死了,您需要删除套接字文件。 最好的方法是拨打bool QLocalServer::removeServer ( const QString & name )

    m_server = new QLocalServer(this);
    QString serverName("serviceUniqueName");
    QLocalServer::removeServer(serverName);
    if (!m_server->listen(serverName)) {
        qDebug() << "Not able to start the Server";
        return;
    }
    

    这样你的监听电话永远不会失败。

    【讨论】:

      【解决方案2】:

      Qt 帮助:

      在 Unix 上,如果服务器在没有关闭的情况下崩溃,监听将失败 地址使用错误。要创建新服务器,应删除该文件。 在 Windows 上,两个本地服务器可以同时监听同一个管道 时间,但任何连接都将转到其中一台服务器。

      所以,如果你使用 *nix,你应该删除文件“/tmp/socket_name”。

      【讨论】:

      • 但是我现在有另一个问题,如果我尝试在有另一个实例运行时启动服务器,只需转到“/tmp/socket_name”,删除文件并重新启动......所以会它将消息定向到最后一个开始或第一个或未确定的消息? @amartel
      • 我真的不知道,但为了避免你可以使用 QtSingleApplication:qt.digia.com/Product/Qt-Add-Ons/Qt-Solutions-Archive
      • 这个答案不是跨平台的,因为在 Unix(不是 Linux)上,文件位于 /var/folders/ 下,具有系统生成的名称。 @Alexey 建议使用QLocalServer::removeServer,这是删除文件的正确方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-16
      • 2018-02-22
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      相关资源
      最近更新 更多