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

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Передача файлов по сети  (Прочитано 16244 раз)
virtual_root
Гость
« : Ноябрь 07, 2010, 15:56 »

Доброго времени суток.
Как мне реализовать следующую задачу: есть два компьютера между ними установлена сеть(через wife). Мне нужно с одного компьютера на другой передать файлы, и сохранить на принимаемом компьютере по определенному пути.
Написала следующий код:
void MainWindow::on_pushButton_clicked()
{
    QFile file("matan.jpg");
    QHttp http;
    http.setHost("192.168.1.25");  // ip-адрес принимаемого компьютера
    http.post("F:\matan.jpg",&file);

}

но почему-то ничего не приходит...Что я не так указала? Может что-то ещё нужно добавить?
P.S. диск F:\ доступен по сети, на него я и пытаюсь записать файл matan.jpg
Записан
BRE
Гость
« Ответ #1 : Ноябрь 07, 2010, 16:38 »

IMHO, ты не очень понимаешь, что такое http вообще и реализация QHttp в частности.  Подмигивающий

P.S. диск F:\ доступен по сети, на него я и пытаюсь записать файл matan.jpg
Если этот диск доступен, то можно просто сделать:
bool QFile::copy ( const QString & fileName, const QString & newName ) [static]
Записан
merke
Гость
« Ответ #2 : Ноябрь 07, 2010, 16:43 »

OMG, срочно рыться по форуму и читать темы связанные с передачей файлов по сети!!!
Записан
virtual_root
Гость
« Ответ #3 : Ноябрь 07, 2010, 16:44 »

наверное,я не очень понимаю. Я просто думала что передачу файлов можно так было организовать.
Получается я просто могу скопировать файл с удаленного компьютера?
Можете,пожалуйста,привести пример кода.
Записан
merke
Гость
« Ответ #4 : Ноябрь 07, 2010, 17:30 »

Если реализовывать всё это сокетами по протоколу TCP/IP то придется реализовывать целый протокол.

А лучше посмотри в сторону QFtp

И сеть у тебя не по Wife, а по Wifi
Записан
virtual_root
Гость
« Ответ #5 : Ноябрь 07, 2010, 17:45 »

спасибо)) сейчас как раз и смотрела про QFTP. У меня возник маленький вопрос: получается на одном компьютере должен быть установлен FTP-сервер(он у меня установлен на ноутбуке), и тогда я могу с другого компьютера соединиться со своим FTP-сервером? Или он должен быть обязательно доступен из интернета(как в примере QT\examples\ftp client) ?
Записан
virtual_root
Гость
« Ответ #6 : Ноябрь 07, 2010, 18:20 »

написала следующий код:
 QFile file("matan.mov");
    QFtp ftp;
    if (file.open(QIODevice::WriteOnly)){
    ftp.connectToHost("192.168.1.21");
    ftp.login("access","12345");
    ftp.cd("new");
    ftp.get("file.mov",&file);

запускаю программу на том же компьютере где и FTP сервер, с сервером соединяется, даже файл с таким именем появляется в директории с программой,но почему-то он всегда весит 0 байт. В чём проблема? Я что-то забыла указать?
Записан
BRE
Гость
« Ответ #7 : Ноябрь 07, 2010, 18:31 »

Я что-то забыла указать?
Забыла...  Улыбающийся
Забыла то, что объект класса QFtp выполняет свою работу ассинхронно, т.е. вызов метода get только запускает загрузку файла, сама же загрузка происходит в дальнейшем.
Ты создаешь объект класса QFtp на стеке, и сразу после завершения этого слота этот объект разрушается (соответственно загрузка прерывается не начавшись).
Создавай объект на куче (через new), что бы увеличить время его жизни.

Записан
virtual_root
Гость
« Ответ #8 : Ноябрь 07, 2010, 18:57 »

Я исправила,но всё тоже самое осталось и теперь программа после нажатия по кнопке ещё и сразу закрывается,скопировав как обычно только название файла мне в директорию...я не могу понять почему,помогите,пожалуйста!
P.S. Ребята,спасибо вам большое за терпение и объяснения)) я пока только учусь всему...
Записан
virtual_root
Гость
« Ответ #9 : Ноябрь 07, 2010, 18:58 »

Забыла привести пример кода,того что получилось:

QFile file("matan.pdf");
    QFtp  *ftp;
    ftp = new QFtp(ftp);
    if (file.open(QIODevice::WriteOnly)){
    ftp->connectToHost("192.168.1.21");
    ftp->login("access","12345");
    ftp->cd("new");
    ftp->get("file.pdf",&file);
Записан
BRE
Гость
« Ответ #10 : Ноябрь 07, 2010, 19:32 »

QFile file("matan.pdf");         // Объект file так же разрушиться при выходе из слота
//    ftp = new QFtp(ftp);         // Не нужно указывать в качестве парента ftp
    QFtp *ftp = new QFtp( this );   // либо не указывай ничего (и удаляй объект ftp сама после завершения загрузки),
                     // или укажи в качестве парента объект, который сам его удалит при своем разрушении
Записан
virtual_root
Гость
« Ответ #11 : Ноябрь 07, 2010, 19:42 »

всё заработало правильно!!!))) BRE огромное вам спасибо))) жалко что на форумах конфеткой не угостишь...хотелось отблагодарить за терпение))
Записан
virtual_root
Гость
« Ответ #12 : Ноябрь 07, 2010, 19:52 »

и ещё один маленький вопросик Подмигивающий я на форму добавила QProgreesBar, а как мне связать его с закачкой файла,чтобы видны были проценты загрузки??
Записан
BRE
Гость
« Ответ #13 : Ноябрь 07, 2010, 19:54 »

и ещё один маленький вопросик Подмигивающий я на форму добавила QProgreesBar, а как мне связать его с закачкой файла,чтобы видны были проценты загрузки??
void QFtp::dataTransferProgress ( qint64 done, qint64 total ) [signal]
Записан
virtual_root
Гость
« Ответ #14 : Ноябрь 07, 2010, 20:03 »

а что это за параметры мне нужно передать? Это я должна проверять сколько изначально файл весит и каждый раз смотреть сколько байт подгружено потом делить на общее количество, умножать на 100% и передавать в progressbar?
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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