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

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

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在登录类中声明为私有(private)成员(QTcpSocket * pSocket;)。

不幸的是,我是QT的新手,我真的不知道'waitNextStep()'函数应该包含什么。我刚得到了返回1;我不确定连接功能中的SLOT,因为我在许多示例中都注意到那里存在不同的功能。

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

最佳答案


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

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

关于c++ - Qt客户端-连接到C服务器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21067451/

10-17 01:38