无法启动qlocalserver

时间:2013-03-26 10:52:38

标签: qt ipc qlocalsocket

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

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

那么如何让前一个进程发布该名称呢?

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

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

2 个答案:

答案 0 :(得分:14)

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

这样你的听力呼叫永远不会失败。

答案 1 :(得分:6)

Qt帮助:

  

在Unix上,如果服务器崩溃而没有关闭,则listen将失败   AddressInUseError。要创建新服务器,应删除该文件。   在Windows上,两个本地服务器可以同时侦听同一个管道   时间,但任何连接都将转到服务器之一。

因此,如果您使用* nix,则应删除文件“/ tmp / socket_name”。