我知道有人问过与此类似的问题,但我还没有找到解决我问题的答案。
我正在调整一些现有的 Qt 代码,以将服务器功能添加到我公司使用的程序中。为此,我在现有对话框中添加了一个 QTcpServer 对象,调用 listen() 并将一个插槽连接到 newConnection 发射器,例如:
.h
class QConsole : public QDialog
{
Q_OBJECT
public:
void init();
public slots:
void new_Connection();
private:
QTcpServer m_Server;
}
.cpp
void QConsole::init()
{
m_Server.listen(QHostAddress::Any, 12346);
QDialog::connect(&m_Server, SIGNAL(newConnection()), this, SLOT(new_Connection()));
}
主要是:
int main( int argc, char *argv[] )
{
QApplication app(argc, argv);
QConsole * _output_window = new QConsole(desktopRect);
_output_window->init();
_output_window->show();
return app.exec();
}
new_Connection() 永远不会被调用,所以我看不到相关性,但它是:
void QConsole::new_Connection()
{
}
这很好用,因为我的程序开始侦听指定的端口,如果我通过 telnet 连接到它,它建立的各种连接,但从未调用过 new_Connection()!
我已经看到关于这个问题的帖子可以追溯到 2005 年,所以这显然不是一个新事物,但我还没有找到对这个问题的满意答案(或实际上任何答案)。这让工作中的每个人都感到困惑,即使是编写 Qt 服务器程序的人。我猜测现有框架存在根本性错误,但我不知道它可能是什么。
我已经为此扯了一天半的头发,而我成功的关闭是使用 waitForNewConnection() ,它实际上会给我一个套接字,但是当我连接到 readReady() 发射器时,那从来没有也被解雇了。那么什么会阻止这些信号永远不会被调用呢?
请放过我的理智,并尽可能地帮助我。