Qt qtcpserver只有在main函数中创建时才工作

qt qtcpserver is only working when it is created in main function

本文关键字:创建 工作 函数 main qtcpserver Qt      更新时间:2023-10-16

我刚刚写了一个模拟的qtcpserver,几乎是这个例子:QT QTcpServer::incomingConnection(qintptr handle)不触发?

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

加工:

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

当我在主函数中创建类 A 并在 A 中创建 tcpserver 时,尽管服务器本身已启动,但 incomingConnection() 函数永远不会执行。我可以看到这一点,因为我得到"服务器从端口启动......"来自 A 构造函数的消息:

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

这意味着,我的主函数现在拥有类 A 和 qtcpserver 函数。qtcpserver 函数在客户端连接时再次创建一个新线程。我想做的是将线程接收的消息放在我的类 A 中。这就是为什么我想在 A 类中创建 qtcpserver。

有人对此有建议吗?如何在 A 中创建服务器?

谢谢!

您需要使对象服务器成为类 Class A 的成员,因为现在此对象在创建后立即销毁(因为现在您在本地范围内创建它)