Клиент Qt – подключиться к серверу C
Вопрос
Я пытаюсь создать клиент, который должен подключаться к серверу 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 и знаю, что он функционален, поскольку тестировал его без части подключения.Часть получения IP-адреса из lineEdits также работает.pSocket объявлен в классе Login как частный член (QTcpSocket *pSocket;).
К сожалению, я новичок в QT и не знаю, что должна содержать функция waitNextStep().Я только что сделал возврат 1;Я не уверен насчет SLOT в функции подключения, поскольку во многих примерах я заметил, что там есть разные функции.
Если я запускаю программу, я не получаю никаких ошибок, и программа работает нормально.Но когда я нажимаю кнопку входа в систему, диалоговое окно зависает примерно на 15 секунд — оно не отвечает.После этого я получаю сообщение «Ошибка при подключении».Любая помощь будет высоко ценится.
Решение
К сожалению, я новичок в QT и не знаю, что должна содержать функция waitNextStep().Я только что сделал возврат 1;Я не уверен насчет SLOT в функции подключения, поскольку во многих примерах я заметил, что там есть разные функции.
Это сильно зависит от вашего варианта использования, но обычно это обработчик входящих данных, все, что вы хотите с ними делать, возможно, включая то, что вы просто сохраняете их в переменной-члене на данный момент.
Если я запускаю программу, я не получаю никаких ошибок, и программа работает нормально.Но когда я нажимаю кнопку входа в систему, диалоговое окно зависает примерно на 15 секунд — оно не отвечает.После этого я получаю сообщение «Ошибка при подключении».Любая помощь будет высоко ценится.
Потому что if(pSocket->waitForConnected())
это блокировка (т.е.sync) использование асинхронной операции Qt.Вместо этого я бы предложил подключиться к подключенному сигналу согласно документация:
void QAbstractSocket::connected() [сигнал]
Этот сигнал генерируется после вызова метода ConnectToHost() и успешного установления соединения.
Примечание:В некоторых операционных системах сигнал Connected() может быть отправлен непосредственно из вызова ConnectToHost() для подключения к локальному хосту.