QLocalServer 不会启动传入连接

QLocalServer won't start an incoming connection

本文关键字:连接 启动 QLocalServer      更新时间:2023-10-16

我正在Qt中创建一个简单的QSocketServer .套接字开始侦听,但传入连接方法似乎从未运行。有人能解释一下这里出了什么问题吗?

主:

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

谁能告诉我为什么传入连接没有触发?

——更新:只是为了好玩,我钩了一个方法到newConnection信号,该方法在我连接时触发。那么为什么incomingConnection方法没有触发呢?

谁能告诉我为什么传入连接没有触发?

Michelle,你好像打错字了。上述虚拟保护方法的签名可以在这里阅读。这个论证和你的变体有一点细微的差别。

修复方法是修改相应头文件和源文件中的声明和定义,如下所示:

void incomingConnection(quintptr socketDescriptor);
//                       ^
我建议按如下方式开始使用Q_DECL_OVERRIDE宏:
void incomingConnection(q**u**intptr socketDescriptor) Q_DECL_OVERRIDE;

这将确保当您的Qt应用程序在c++ 11支持下构建时可以得到编译器错误,当它不支持时,它也会编译得很好,但不会给出错误。它使用c++ 11中引入的"override"上下文说明符。