Qt 客户端 - 连接到 C 服务器

Posted

技术标签:

【中文标题】Qt 客户端 - 连接到 C 服务器【英文标题】:Qt client - connect to C server 【发布时间】:2014-01-11 20:25:34 【问题描述】:

我正在尝试创建一个应该连接到 C 服务器的客户端。我必须使用 TCP。我已经有一个功能齐全的服务器,但我无法连接我的客户端。我不想向服务器发送任何数据(此时)。我只是想建立一个连接并打开一个新的对话框。

这是 Void Login::on_pushButton_clicked() 槽中的代码。 // pushButton 是我的登录按钮

pSocket = new QTcpSocket (this);
connect (pSocket, SIGNAL(readyRead()), SLOT(waitNextStep()));
pSocket->connectToHost(ui->lineEdit->text(), ui->lineEdit_2->text().toInt());
if(pSocket->waitForConnected())

    Menu mMenu;
    mMenu.setModal(true);
    mMenu.exec();

else

    QMessageBox::critical(this,tr("Error"),tr("Error at Connect"));

我已经定义了 Menu 类,并且我知道它是有效的,因为我在没有连接部分的情况下对其进行了测试。 lineEdits 中的 IP 获取部分也可以正常工作。 pSocket 在 Login 类中声明为私有成员 (QTcpSocket *pSocket;)。

不幸的是,我是 QT 的新手,我真的不知道“waitNextStep()”函数应该包含什么。我刚做了一个 return 1;我不确定 connect 函数中的 SLOT,因为我在许多示例中注意到那里有不同的函数。

如果我运行程序,我不会收到任何错误,并且程序执行得很好。但是当我点击登录按钮时,对话框会冻结约 15 秒 - 它没有响应。之后,我收到“连接时出错”消息。任何帮助都感激不尽。

【问题讨论】:

“不幸的是,我是 QT 新手,我真的不知道 'waitNextStep()' 函数应该包含什么。” -> 嗯,这不是 Qt 问题。这是一个需要知道的用例问题。 我知道我有很多东西要学,但这是一个紧迫的项目,所以我只是从教程和示例中获取尽可能多的信息。我现在无法阅读和吸收文档。还是谢谢你的回复 听起来像是人们很容易陷入的常见项目管理问题:“完成它,完成它,不要估计它需要多少工作。”无论哪种方式,我都不是在评判你的 Qt 技能,而是说我们对用例的了解不够透彻,因此在该方法中究竟应该做什么,所以我们只能给出一般性的提示,没有进一步说明。跨度> 【参考方案1】:

不幸的是,我是 QT 的新手,我真的不知道“waitNextStep()”函数应该包含什么。我刚刚做了一个 return 1;我不确定 connect 函数中的 SLOT,因为我在许多示例中注意到那里有不同的函数。

这在很大程度上取决于您的用例,但这通常是传入数据的处理程序,无论您想对它做什么,可能包括您暂时将其存储在一个成员变量中。

如果我运行程序,我不会收到任何错误,并且程序执行得很好。但是当我点击登录按钮时,对话框会冻结约 15 秒 - 它没有响应。之后,我收到“连接时出错”消息。任何帮助将不胜感激。

这是因为if(pSocket->waitForConnected())是异步Qt操作的阻塞(即同步)使用。我建议改为按照documentation 连接到已连接的信号:

void QAbstractSocket::connected() [信号]

在调用 connectToHost() 并成功建立连接后发出此信号。

注意:在某些操作系统上,connectToHost() 调用可能会直接发出 connected() 信号,以连接到本地主机。

【讨论】:

看,我根本做不到。你需要更具体地说明我应该做什么。我修改了几次代码并尝试使用连接的信号,但没有机会......提前致谢 @KupiKupi:这不是一个家庭作业网站,尤其是没有明确的用例、面临的错误等等,恐怕。试着向你的经理解释,在这种情况下你不会帮助任何人。弊大于利。 在这种情况下唯一可能的危害是没有及时完成项目。这和我的工作无关。 '我建议做的是根据文档连接到连接的信号:'。根据文档,没有关于如何做到这一点的解释 @KupiKupi:您需要对这个网站有一个最低限度的了解。向为你编写工作代码的人施压是题外话 AFAICT。你应该表现出一些努力。恐怕我不会为这样一个管理不善的项目做免费的家庭作业作家,在我的理解中,这也不是该网站的目的。在阅读文档并获得一些基本了解后,我很乐意帮助那些愿意自己学习并从中获得乐趣的人。 但我读过文档。而且我不认为它管理得这么糟糕。试着做我一秒钟。肩上的压力很大,学习起来很困难。我没有几周的时间来完成这个项目。仅仅1周。而且我还有2天。在这种情况下我看不到乐趣。无论如何,这是您的决定,但我没有要求您编写代码。只是为了更具体一点。

以上是关于Qt 客户端 - 连接到 C 服务器的主要内容,如果未能解决你的问题,请参考以下文章

断开Qt后连接到服务器时客户端程序崩溃

使用 Echo 客户端示例从 Qt UI 连接到 WebSocket 服务器

通过 QT C++ 连接到 SQL server 2005

通过 TCP 连接到 DBus 服务

QTcpSocket false 连接到 QTcpServer

Qt 连接到 WebSockets 服务器