如何在使用 QLocalSocket 的 IPC 期间告诉客户端已经结束连接?

Posted

技术标签:

【中文标题】如何在使用 QLocalSocket 的 IPC 期间告诉客户端已经结束连接?【英文标题】:How to tell the client has end the connection during IPC using QLocalSocket? 【发布时间】:2016-06-06 17:31:45 【问题描述】:

我有两个使用 QLocalSocket 和 QLocalServer 进行 IPC 的程序,我已成功实现连接并成功发送数据。

但是,对于 QLocalServer 端,我如何知道连接已被客户端终止(如客户端程序退出。)?

这样我就可以释放服务器端对应socket的资源了吗?

【问题讨论】:

从断开的套接字读取或通过断开的套接字发送数据会触发错误。 这样,我需要不断地读/写那个套接字。还有其他不需要的方法吗? 【参考方案1】:

您可以将来自 QLocalHost 的 void QLocalSocket::disconnected() 信号连接到您班级中的插槽:

connect(mySocket, &QLocalSocket::disconnected, this, &MyClass::socketDisconnected, Qt::QueuedConnection);

或者您可以连接到 stateChange(更详细的版本),例如:

// Connect like this
connect(mySocket, &QLocalSocket::stateChanged, this, &MyClass::socketNewState, Qt::QueuedConnection);

// Implement a slot that handles the various states...
MyClass::socketNewState(QLocalSocket::LocalSocketState socketState)

   qDebug() << "New state is " << socketState << endl;

【讨论】:

以上是关于如何在使用 QLocalSocket 的 IPC 期间告诉客户端已经结束连接?的主要内容,如果未能解决你的问题,请参考以下文章

IPC QLocalSocket -> C,为啥我的连接失败?连接失败:[2](没有这样的文件?!)

qt浏览器插件中的IPC

Qt IPC - 命名管道

从 QLocalSocket 读取超过 2048 个字节

什么是ipc?我该如何使用它?

如何在 Windows 10 上使用 IPC::Run 捕获超时异常?