Название: Проверить Ftp соединение
Отправлено: Leviafan от Март 20, 2015, 23:14
Как правильно проверить соединение с ftp сервером? Есть 4 текстовых поля в которых при вводе адреса, порта, имени пользователя и пароля проверяется соединение с ftp сервером. connect(ui->lineEdit_ftp_adr, SIGNAL(textEdited(QString)), SLOT(ftp_connect())); connect(ui->lineEdit_ftp_port, SIGNAL(textEdited(QString)), SLOT(ftp_connect())); connect(ui->lineEdit_ftp_user, SIGNAL(textEdited(QString)), SLOT(ftp_connect())); connect(ui->lineEdit_ftp_pass, SIGNAL(textEdited(QString)), SLOT(ftp_connect())); connect(&ftp, SIGNAL(commandFinished(int,bool)), this, SLOT(ftp_state(int, bool))); void MainWindow::ftp_connect() { ftp.connectToHost(ui->lineEdit_ftp_adr->text().simplified(), ui->lineEdit_ftp_port->text().toInt()); ftp.login(ui->lineEdit_ftp_user->text().simplified(), ui->label_ftp_pass->text().simplified()); qDebug() << ftp.error(); } void MainWindow::ftp_state(int, bool error) { if(error) { qDebug() << "Не могу подключиться к ftp-серверу"; } else { qDebug() << "OK"; } } Но после ввода нескольких символов слот ftp_state(int, bool error) перестает вызываться 0 Не могу подключиться к ftp-серверу 3 Не могу подключиться к ftp-серверу 3 Не могу подключиться к ftp-серверу 3 Не могу подключиться к ftp-серверу //последний вызов, дальше тока qDebug() << ftp.error() показывает 2 0 0 0 0 0 0 я ввожу адрес 192.168.1.1, но после 192. перестает вызываться слот
Название: Re: Проверить Ftp соединение
Отправлено: Bepec от Март 20, 2015, 23:57
А вы не страдайте фигней, пытаясь подключиться к каждой цифре букве символу) Проверяйте по маске ip адрес и только тогда подключайтесь.
Название: Re: Проверить Ftp соединение
Отправлено: Leviafan от Март 21, 2015, 15:34
Видимо я действительно фигней страдаю. Проверять буду по кнопке. Проверка нужна перед внесением настроек соединения в базу данных.
Название: Re: Проверить Ftp соединение
Отправлено: Leviafan от Март 22, 2015, 17:31
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(ftp_connect())); connect(&ftp, SIGNAL(commandFinished(int,bool)), this, SLOT(ftp_state(int, bool)));
void MainWindow::ftp_connect() { ftp.connectToHost(ui->lineEdit_ftp_adr->text().simplified(), ui->lineEdit_ftp_port->text().toInt()); ftp.login(ui->lineEdit_ftp_user->text().simplified(), ui->label_ftp_pass->text().simplified()); } void MainWindow::ftp_state(int, bool error) { if (ftp.currentCommand() == QFtp::ConnectToHost) { if(!error) { qDebug() << "Соединение с хостом установлено"; } qDebug() << ftp.errorString(); } }
проверяю соединение через кнопку, если два раза нажать кнопку то выводит "Unknown error" QAbstractSocket::connectToHost() called when already looking up or connecting/connected to "192.168.1.1" то есть я пытаюсь подключиться при уже установленном соединении. как разорвать соединение? после появления строки QAbstractSocket::connectToHost() called when already looking up or connecting/connected to "192.168.1.1" SLOT(ftp_state(int, bool)) больше не срабатывает. что то я запутался как теперь логин и пароль проверить
Название: Re: Проверить Ftp соединение
Отправлено: Bepec от Март 22, 2015, 22:46
Ну механики работы класса я не знаю, но в общем вам нужно открывать соединение и закрывать соединение. Если у класса нет таких возможностей (нет метода close, допустим), то объект класса надо создавать динамически и при неудаче просто delete.
Название: Re: Проверить Ftp соединение
Отправлено: Leviafan от Март 23, 2015, 19:46
Все оказалось намного проще void MainWindow::ftp_connect2() { QUrl url("ftp://" + ui->lineEdit_ftp_adr->text().simplified() + "/1"); url.setPort(ui->lineEdit_ftp_port->text().toInt()); url.setUserName(ui->lineEdit_ftp_user->text().simplified()); url.setPassword(ui->lineEdit_ftp_pass->text().simplified()); QNetworkRequest request(url); QNetworkAccessManager *manager = new QNetworkAccessManager; QNetworkReply *reply = manager->get(request); connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(finishedSlot(QNetworkReply::NetworkError))); } void MainWindow::finishedSlot(QNetworkReply::NetworkError networkError) { qDebug()<< networkError; }
QUrl url("ftp://" + ui->lineEdit_ftp_adr->text().simplified() + "/1"); и еще надо что бы после адреса фтп была какая нибудь папка, даже не существующая или файл(192.168.1.1/1), иначе будет 202 ошибку выдавать Результат qDebug()<< networkError: 204 не правильная авторизация 203 не найдено содержимое, в моем случае папка 1, но авторизация успешная
|