我刚写了一个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?
中创建服务器谢谢!
答案 0 :(得分:2)
您需要将对象 server 作为类classA的成员,因为此对象现在会在创建后立即销毁(因为现在您在本地范围内创建它)