QLocalServer 不会启动传入连接
Posted
技术标签:
【中文标题】QLocalServer 不会启动传入连接【英文标题】:QLocalServer won't start an incoming connection 【发布时间】:2014-03-14 01:14:39 【问题描述】:我正在 Qt 中创建一个简单的 QSocketServer。套接字开始侦听,但incomingConnection 方法似乎从未运行。有人可以解释这里出了什么问题吗?
主要:
m_pipeserver = new PipeServer(this);
if (m_pipeserver->listen("test.sock"))
qDebug() << "STARTED";
pipeserver.h
class PipeServer : public QLocalServer
Q_OBJECT
public:
PipeServer(Controller *parent = 0);
protected:
void incomingConnection(qintptr socketDescriptor);
pipeserver.cpp
PipeServer::PipeServer(Controller *parent)
void PipeServer::incomingConnection(qintptr socketDescriptor)
qDebug() << "NEW CONNECTION";
// etc...
我看到 STARTED 消息,但在运行时从未看到 NEW CONNECTION:
socat -v READLINE unix-connect:/tmp/test.sock
谁能告诉我为什么incomingConnection 没有触发?
-- 更新:只是为了好玩,我将一个方法连接到 newConnection 信号中,当我连接时该方法会触发。那么为什么incomingConnection 方法没有触发呢?
【问题讨论】:
【参考方案1】:谁能告诉我为什么incomingConnection 没有触发?
米歇尔,看来你打错了。上述虚拟保护方法的签名可以读取in here。那的论点和你的变体之间有细微的差别。
解决方法是修改相应标题和源中的声明和定义,如下所示:
void incomingConnection(quintptr socketDescriptor);
// ^
我建议开始使用Q_DECL_OVERRIDE
宏,如下所示:
void incomingConnection(q**u**intptr socketDescriptor) Q_DECL_OVERRIDE;
这将确保当您的 Qt 应用程序使用 C++11 支持构建时,您可以获得编译器错误,如果不是,它也可以正常编译,但不会出现错误。它使用了 C++11 中引入的“覆盖”上下文说明符。
【讨论】:
以上是关于QLocalServer 不会启动传入连接的主要内容,如果未能解决你的问题,请参考以下文章
在 QtService 上使用 QLocalServer:如何为 QLocalServer 创建的命名管道设置安全属性?
如何在使用 QLocalSocket 的 IPC 期间告诉客户端已经结束连接?