Russian Qt Forum
Апрель 26, 2024, 09:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проверить Ftp соединение  (Прочитано 4906 раз)
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. перестает вызываться слот
Записан
Bepec
Гость
« Ответ #1 : Март 20, 2015, 23:57 »

А вы не страдайте фигней, пытаясь подключиться к каждой цифре букве символу) Проверяйте по маске ip адрес и только тогда подключайтесь.
Записан
Leviafan
Гость
« Ответ #2 : Март 21, 2015, 15:34 »

Видимо я действительно фигней страдаю. Проверять буду по кнопке.
Проверка нужна перед внесением настроек соединения в базу данных.
Записан
Leviafan
Гость
« Ответ #3 : Март 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)) больше не срабатывает. что то я запутался как теперь логин и пароль проверить
« Последнее редактирование: Март 22, 2015, 17:33 от Leviafan » Записан
Bepec
Гость
« Ответ #4 : Март 22, 2015, 22:46 »

Ну механики работы класса я не знаю, но в общем вам нужно открывать соединение и закрывать соединение.
Если у класса нет таких возможностей (нет метода close, допустим), то объект класса надо создавать динамически и при неудаче просто delete.
Записан
Leviafan
Гость
« Ответ #5 : Март 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, но авторизация успешная
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.045 секунд. Запросов: 20.