Вопрос

Я пытаюсь создать клиент, который должен подключаться к серверу 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() для подключения к локальному хосту.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top