Russian Qt Forum
Ноябрь 24, 2024, 01:48
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Работа с сетью
>
Передача файлов по сети
Страниц: [
1
]
2
3
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Передача файлов по сети (Прочитано 16632 раз)
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
Гость
Re: Передача файлов по сети
«
Ответ #1 :
Ноябрь 07, 2010, 16:38 »
IMHO, ты не очень понимаешь, что такое http вообще и реализация QHttp в частности.
Цитата: virtual_root от Ноябрь 07, 2010, 15:56
P.S. диск F:\ доступен по сети, на него я и пытаюсь записать файл matan.jpg
Если этот диск доступен, то можно просто сделать:
bool QFile::copy ( const QString & fileName, const QString & newName ) [static]
Записан
merke
Гость
Re: Передача файлов по сети
«
Ответ #2 :
Ноябрь 07, 2010, 16:43 »
OMG, срочно рыться по форуму и читать темы связанные с передачей файлов по сети!!!
Записан
virtual_root
Гость
Re: Передача файлов по сети
«
Ответ #3 :
Ноябрь 07, 2010, 16:44 »
наверное,я не очень понимаю. Я просто думала что передачу файлов можно так было организовать.
Получается я просто могу скопировать файл с удаленного компьютера?
Можете,пожалуйста,привести пример кода.
Записан
merke
Гость
Re: Передача файлов по сети
«
Ответ #4 :
Ноябрь 07, 2010, 17:30 »
Если реализовывать всё это сокетами по протоколу TCP/IP то придется реализовывать целый протокол.
А лучше посмотри в сторону QFtp
И сеть у тебя не по Wife, а по Wifi
Записан
virtual_root
Гость
Re: Передача файлов по сети
«
Ответ #5 :
Ноябрь 07, 2010, 17:45 »
спасибо)) сейчас как раз и смотрела про QFTP. У меня возник маленький вопрос: получается на одном компьютере должен быть установлен FTP-сервер(он у меня установлен на ноутбуке), и тогда я могу с другого компьютера соединиться со своим FTP-сервером? Или он должен быть обязательно доступен из интернета(как в примере QT\examples\ftp client) ?
Записан
virtual_root
Гость
Re: Передача файлов по сети
«
Ответ #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
Гость
Re: Передача файлов по сети
«
Ответ #7 :
Ноябрь 07, 2010, 18:31 »
Цитата: virtual_root от Ноябрь 07, 2010, 18:20
Я что-то забыла указать?
Забыла...
Забыла то, что объект класса QFtp выполняет свою работу ассинхронно, т.е. вызов метода get только запускает загрузку файла, сама же загрузка происходит в дальнейшем.
Ты создаешь объект класса QFtp на стеке, и сразу после завершения этого слота этот объект разрушается (соответственно загрузка прерывается не начавшись).
Создавай объект на куче (через new), что бы увеличить время его жизни.
Записан
virtual_root
Гость
Re: Передача файлов по сети
«
Ответ #8 :
Ноябрь 07, 2010, 18:57 »
Я исправила,но всё тоже самое осталось и теперь программа после нажатия по кнопке ещё и сразу закрывается,скопировав как обычно только название файла мне в директорию...я не могу понять почему,помогите,пожалуйста!
P.S. Ребята,спасибо вам большое за терпение и объяснения)) я пока только учусь всему...
Записан
virtual_root
Гость
Re: Передача файлов по сети
«
Ответ #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
Гость
Re: Передача файлов по сети
«
Ответ #10 :
Ноябрь 07, 2010, 19:32 »
Цитата: virtual_root от Ноябрь 07, 2010, 18:58
QFile file("matan.pdf"); // Объект file так же разрушиться при выходе из слота
// ftp = new QFtp(ftp); // Не нужно указывать в качестве парента ftp
QFtp *ftp = new QFtp( this ); // либо не указывай ничего (и удаляй объект ftp сама после завершения загрузки),
// или укажи в качестве парента объект, который сам его удалит при своем разрушении
Записан
virtual_root
Гость
Re: Передача файлов по сети
«
Ответ #11 :
Ноябрь 07, 2010, 19:42 »
всё заработало правильно!!!))) BRE огромное вам спасибо))) жалко что на форумах конфеткой не угостишь...хотелось отблагодарить за терпение))
Записан
virtual_root
Гость
Re: Передача файлов по сети
«
Ответ #12 :
Ноябрь 07, 2010, 19:52 »
и ещё один маленький вопросик
я на форму добавила QProgreesBar, а как мне связать его с закачкой файла,чтобы видны были проценты загрузки??
Записан
BRE
Гость
Re: Передача файлов по сети
«
Ответ #13 :
Ноябрь 07, 2010, 19:54 »
Цитата: virtual_root от Ноябрь 07, 2010, 19:52
и ещё один маленький вопросик
я на форму добавила QProgreesBar, а как мне связать его с закачкой файла,чтобы видны были проценты загрузки??
void QFtp::dataTransferProgress ( qint64 done, qint64 total ) [signal]
Записан
virtual_root
Гость
Re: Передача файлов по сети
«
Ответ #14 :
Ноябрь 07, 2010, 20:03 »
а что это за параметры мне нужно передать? Это я должна проверять сколько изначально файл весит и каждый раз смотреть сколько байт подгружено потом делить на общее количество, умножать на 100% и передавать в progressbar?
Записан
Страниц: [
1
]
2
3
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...