1

我刚刚写了一个简单的 qtcpserver,几乎就是这个例子:QT QTcpServer::incomingConnection(qintptr handle) not fire?

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

在职的:

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 并在 AI 中创建 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";
    }
}

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

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

谢谢!

4

1 回答 1

2

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

于 2016-01-24T17:19:41.270 回答