10

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

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

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

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

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

2 回答 2

19

正如 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;
}

这样,您的聆听电话将永远不会失败。

于 2013-08-20T10:05:42.150 回答
7

Qt帮助:

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

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

于 2013-03-26T11:37:00.260 回答