crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> FTP через QNetworkAccessManager
andybeg
  опции профиля:
сообщение 1.9.2015, 10:32
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 31.8.2015
Пользователь №: 4443

Спасибо сказали: 0 раз(а)




Репутация:   0  


задача тривиальна - положить в корень FTP файл
    QUrl url("ftp://host/data");
    url.setPort(21);
    url.setUserName("test");
    url.setPassword("pass");
    url.setPort(21);
    QNetworkRequest request;
    request.setUrl(url);

    file = new QFile("file.xml");
    if(file->open(QFile::ReadOnly)){
        QNetworkAccessManager *uploadman = new QNetworkAccessManager(this);
        uploadman->put(request, file);
    }

на стороне сервера наблюдаю такой диалог
Цитата
* Sent: (Not logged in) (ClienyIP)> 220 Browser Ftp Server.
* Received: (Not logged in) (ClienyIP)> USER test
* Sent: (Not logged in) (ClienyIP)> 331 Password required for this user.
* Received: (Not logged in) (ClienyIP)> PASS pass
* Sent: test (ClienyIP)> 230 User Logged In.
* A client has logged-in as "test".
* Received: test (ClienyIP)> TYPE I
* Sent: test (ClienyIP)> 200 Binary transfer mode active.
* Received: test (ClienyIP)> PASV
* Sent: test (ClienyIP)> 227 Entering Passive Mode (HostIP,1,104)
* A client is being deleted.

при этом на сервер сторонними программами файлы заливаются :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
andybeg
  опции профиля:
сообщение 1.9.2015, 11:36
Сообщение #2


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 31.8.2015
Пользователь №: 4443

Спасибо сказали: 0 раз(а)




Репутация:   0  


продолжаю изыскания, мемного дополнил и изменил первоначальный код
    
void finished(QNetworkReply* rep){
    QString err = rep->errorString();
    file.close();
}

.................
    QUrl url("ftp://host/data");
    url.setPort(21);
    url.setUserName("test");
    url.setPassword("pass");
    url.setPort(21);
    QNetworkRequest request;
    request.setUrl(url);

    file = new QFile("file.xml");
    if(file->open(QFile::ReadOnly)){
        data = file.readAll();
        QNetworkAccessManager *uploadman = new QNetworkAccessManager(this);
connect(uploadman,SIGNAL(finished(QNetworkReply*)),this,SLOT(finished(QNetworkReply*)));
        pReply = uploadman->put(request, data);
    }

казус этого кода заключается в том, что если адрес хоста указан правильно, то всё повторяется как в первом сообщении, тоесть связь с ftp вроди бы есть, но данные не передаются, но в слот finished программа не выходит, если же есть какая то ошибка в имени хоста, то программа попадает в finished и сообщает то, да сё стряслось :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
andybeg
  опции профиля:
сообщение 1.9.2015, 14:11
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 31.8.2015
Пользователь №: 4443

Спасибо сказали: 0 раз(а)




Репутация:   0  


возможно это может оказаться важным - класс, в котором реализована передача по FTP работает совместно с QML и объявлен для возможности видеть его в qml
    qmlRegisterType<Lash>("com.ttk.Lash", 1, 0, "Lash");
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 1.9.2015, 14:54
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Насколько я помню, в qt 4.8.0 была какая то ошибка в реализации ftp передачи на уровне протокола. Возможно это поможет.
Патча к сожалению под рукой не имею.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
andybeg
  опции профиля:
сообщение 1.9.2015, 14:59
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 31.8.2015
Пользователь №: 4443

Спасибо сказали: 0 раз(а)




Репутация:   0  


я использую Qt 5.5 и к сожалению код подобный моему(как показало гугленье) часто в других местах работает , но у себя на машине не могу его запустить :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
andybeg
  опции профиля:
сообщение 1.9.2015, 15:53
Сообщение #6


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 31.8.2015
Пользователь №: 4443

Спасибо сказали: 0 раз(а)




Репутация:   0  


появился прогресс, дело в том, что в качестве FTP сервера я использую CFtpServer, решил попробовать свой код на другом сервере, нагуглился CoreFTPServer64, просто первый простой, что попал под руку и о! чудо! - на него файлы передались :(
можно конечно мне посоветовать начать использовать какойньть другой сервер, но пока что это не актуально и потом другие сторонние программы вполне неплохо с ним работают :( мечаль *начал посматривать в сторону curl*
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
andybeg
  опции профиля:
сообщение 1.9.2015, 16:33
Сообщение #7


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 31.8.2015
Пользователь №: 4443

Спасибо сказали: 0 раз(а)




Репутация:   0  


два дня головной боли и проблема решена - оказывается работе FTP клиента мешал брандмауэр (где то в коментах нашел упоминание, что возможна такая проблема), после отключения оного всё заиграло, всем спасибо, всё решено :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 4:43