Russian Qt Forum

Qt => Работа с сетью => Тема начата: insamo от Октябрь 15, 2010, 12:07



Название: Передача фалов по сети больших файлов(клиент-сервер)
Отправлено: insamo от Октябрь 15, 2010, 12:07
Всем здрасти

Прошу гуру о помощи

Пишу многофункциональное клиент-сервер приложение, не могу реализовать функцию передачи файлов.

Интересуют такие вопросы

1. Как передавать  большие файлы ( 2гб ).
2. Если блоками то по скока.
Если у кого-нить есть наметки плиз  поделитесь

Заранее спасибо


Название: Re: Передача фалов по сети больших файлов(клиент-сервер)
Отправлено: merke от Октябрь 15, 2010, 12:14
Я фильм пересылаю 700 метров паками 1024*64 где то за 5 минут по локалке.

http://www.prog.org.ru/index.php?topic=13167.msg98798#msg98798

В этой теме человек предоставляет исходники клиент-серверного приложения для передачи файлов

Удачи


Название: Re: Передача фалов по сети больших файлов(клиент-сервер)
Отправлено: insamo от Октябрь 15, 2010, 15:10
Блин весь форум перелопатил в упор не видел.
Спасибо, огромное! буду разбираться! :)


Название: Re: Передача фалов по сети больших файлов(клиент-сервер)
Отправлено: insamo от Октябрь 15, 2010, 16:05
У меня паходу руки кривые, Алекс плиз скинь свой готовый проект, пожалуста. А я потом скину что получилось.


Название: Re: Передача фалов по сети больших файлов(клиент-сервер)
Отправлено: Waryable от Октябрь 15, 2010, 16:21
А почему не используете QDir? Полный функционал по маневрированию файлами и каталогами.


Название: Re: Передача фалов по сети больших файлов(клиент-сервер)
Отправлено: insamo от Октябрь 15, 2010, 17:05
Опиши как, я просто не представляю как.
Я не хочу в ручную расшаривать папочки


Название: Re: Передача фалов по сети больших файлов(клиент-сервер)
Отправлено: eugene от Октябрь 15, 2010, 21:17
А зачем их вообще шарить? Я так понимаю, речь совсем о другом идет


Название: Re: Передача фалов по сети больших файлов(клиент-сервер)
Отправлено: insamo от Октябрь 16, 2010, 10:04
Что ты предлагаешь, я тебя не пойму. QDir и клиент-сервер как это?

Я делаю клиент-сервер со множеством функций. Одна из функций будет, передача файлов.


Название: Re: Передача фалов по сети больших файлов(клиент-сервер)
Отправлено: merke от Октябрь 16, 2010, 10:44
Тот пример который я тебе показал, т.е. скинул ссылку, ты можешь взять его за основу. Самое главное что можешь взять от туда так это сам блок кода где непосредственно считывается файл кусками и шлется и взять кусок кода где принимающая сторона принимает эти паки и формирует файл.

Для начала тебе нужно придумать свой протокол обмена. Предлагаю следующий:

Допустим клиент передает серверу файл:

Клиент посылает серверу команду допустим: #CMDST#имя_файла_под_которым _сохранить#размер_файла

Т.е. #CMDST# это сама команда означающая начало передачи файла, а уже имя_файла_под_которым _сохранить#размер_файла это параметры команды. Как только сервер получает данную команду он запоминает для текущего клиента название файла и размер файла. И шлет команду например: #CMDIR#, клиент получив её начинает паками слать файл, а сервер получать их, как только весь файл получен на стороне сервера, тот шлет команду #CMDET# т.е. получил файл. На этом передача файла заканчивается.

Будут вопросы пиши!


Название: Re: Передача фалов по сети больших файлов(клиент-сервер)
Отправлено: Edynchik от Декабрь 16, 2010, 11:56
Создал консольный проект по исходнику выложенному выше, network в  .pro добавил...вот только не пойму почему выходит :: error: collect2: ld returned 1 exit status
вот коноль сборки:
Код:
Выполняется сборка проекта filesender...
Настройки не изменились, этап qmake пропускается.
Запускается "C:/Qt/2010.05/mingw/bin/mingw32-make.exe" -w
mingw32-make: Entering directory `D:/QT/filesender'

c:\qt\2010.05\qt\bin\qmake.exe -spec c:\Qt\2010.05\qt\mkspecs\win32-g++ -o Makefile filesender.pro

mingw32-make: Leaving directory `D:/QT/filesender'

mingw32-make: Entering directory `D:/QT/filesender'

C:/Qt/2010.05/mingw/bin/mingw32-make -f Makefile.Debug

mingw32-make[1]: Entering directory `D:/QT/filesender'

g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-subsystem,console -mthreads -Wl -o debug\filesender.exe debug/filesender.o debug/moc_filesender.o  -L"c:\Qt\2010.05\qt\lib" -lQtNetworkd4 -lQtCored4

mingw32-make[1]: Leaving directory `D:/QT/filesender'

mingw32-make: Leaving directory `D:/QT/filesender'

c:/qt/2010.05/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../libmingw32.a(main.o):main.c:(.text+0x104): undefined reference to `WinMain@16'

collect2: ld returned 1 exit status

mingw32-make[1]: *** [debug\filesender.exe] Error 1

mingw32-make: *** [debug] Error 2

Процесс "C:/Qt/2010.05/mingw/bin/mingw32-make.exe" завершился с кодом %2.
Возникла ошибка при сборке проекта filesender (цель: Настольный компьютер)
Во время выполнения сборки на этапе "Сборка"
знаю что проблема в .pro, а вот в чем понять не могу. Может кто поможет,буду очень благодарен)
вот и сам .pro:
Код:
#-------------------------------------------------
#
# Project created by QtCreator 2010-12-16T11:12:16
#
#-------------------------------------------------

QT       += core\
            network

QT       -= gui

TARGET = fileserver
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += fileserver.cpp \
    filereceiverthread.cpp \


HEADERS += \
    fileserver.h \
    filereceiverthread.h


Название: Re: Передача фалов по сети больших файлов(клиент-сервер)
Отправлено: twp от Декабрь 16, 2010, 12:07
Цитировать
undefined reference to `WinMain@16'
Есть функция main?


Название: Re: Передача фалов по сети больших файлов(клиент-сервер)
Отправлено: Edynchik от Декабрь 16, 2010, 14:52
Цитировать
undefined reference to `WinMain@16'
Есть функция main?
да с этим разобрался, спасибо...вот только остался один вопрос: В какой последовательности выолнять все функции между клиентом и сервером?