qt qtcpserver仅在main函数中创建时才起作用

时间:2016-01-24 17:09:42

标签: c++ qt qtcpserver

我刚写了一个simle qtcpserver,几乎是这个例子:QT QTcpServer::incomingConnection(qintptr handle) not firing?

服务器基本上正常工作,但只有在主函数中创建时才有效。

工作:

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    TestServer server;

    return a.exec();
}

无法正常工作(此代码无论如何都不会工作,只是为了向您展示我的意思):

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    classA cA;

    return a.exec();
}

classA::classA(QObject *parent) :
    QThread(parent)
{
    TestServer server;
}

当我在main函数中创建一个A类并在A中创建tcpserver时,即使服务器本身已启动,也不会执行incomingConnection()函数。 我可以看到这个因为我得到了#34;服务器从端口开始..."来自A&#39的构造函数的消息:

TestServer::TestServer(QObject *parent):
    QTcpServer(parent)
{
    if (this->listen(QHostAddress::Any, 2323)) {
        qDebug() << "Server start at port: " << this->serverPort();
    } else {
        qDebug() << "Start failure";
    }
}

这意味着,我的main函数现在包含A类和qtcpserver函数。当客户端连接时,qtcpserver函数再次创建一个新线程。 我想要做的是在我的A类中获得线程收到的消息。这就是为什么我想在A类中创建qtcpserver。

有人对此提出建议吗? 如何在A?

中创建服务器

谢谢!

1 个答案:

答案 0 :(得分:2)

您需要将对象 server 作为类classA的成员,因为此对象现在会在创建后立即销毁(因为现在您在本地范围内创建它)