qt qtcpserver 仅在主函数中创建时才起作用
qt qtcpserver is only working when it is created in main function
我刚刚写了一个简单的qtcpserver,差不多就是这个例子:
服务器基本上可以工作,但只有在主函数中创建时才会工作。
工作:
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;
}
当我在主函数中创建一个 class A 并在 A 中创建 tcpserver 时,尽管服务器本身已启动,但永远不会执行 incomingConnection() 函数。
我可以看到这一点,因为我从 A 的构造函数收到 "Server start at port ..." 消息:
TestServer::TestServer(QObject *parent):
QTcpServer(parent)
{
if (this->listen(QHostAddress::Any, 2323)) {
qDebug() << "Server start at port: " << this->serverPort();
} else {
qDebug() << "Start failure";
}
}
这意味着,我的主要功能现在拥有 class A 和 qtcpserver 功能。当客户端连接时,qtcpserver 函数再次创建一个新线程。
我想要做的是让线程接收到的消息在我的 class A 中。这就是为什么我想在 class A 中创建 qtcpserver 的原因。
有人对此有什么建议吗?
如何在 A 中创建服务器?
谢谢!
你需要让对象 server 成为 class classA 的成员,因为现在这个对象在创建后立即销毁(因为现在你在本地范围内创建)
我刚刚写了一个简单的qtcpserver,差不多就是这个例子:
服务器基本上可以工作,但只有在主函数中创建时才会工作。
工作:
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;
}
当我在主函数中创建一个 class A 并在 A 中创建 tcpserver 时,尽管服务器本身已启动,但永远不会执行 incomingConnection() 函数。 我可以看到这一点,因为我从 A 的构造函数收到 "Server start at port ..." 消息:
TestServer::TestServer(QObject *parent):
QTcpServer(parent)
{
if (this->listen(QHostAddress::Any, 2323)) {
qDebug() << "Server start at port: " << this->serverPort();
} else {
qDebug() << "Start failure";
}
}
这意味着,我的主要功能现在拥有 class A 和 qtcpserver 功能。当客户端连接时,qtcpserver 函数再次创建一个新线程。 我想要做的是让线程接收到的消息在我的 class A 中。这就是为什么我想在 class A 中创建 qtcpserver 的原因。
有人对此有什么建议吗? 如何在 A 中创建服务器?
谢谢!
你需要让对象 server 成为 class classA 的成员,因为现在这个对象在创建后立即销毁(因为现在你在本地范围内创建)