2

我正在尝试创建一个应该连接到 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 秒 - 它没有响应。之后,我收到“连接时出错”消息。任何帮助都感激不尽。

4

1 回答 1

0

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

这在很大程度上取决于您的用例,但这通常是您希望处理的传入数据的处理程序,可能包括您暂时将其存储在成员变量中。

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

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

无效 QAbstractSocket::connected() [信号]

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

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

于 2014-01-11T20:34:28.163 回答