Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.18;
Скачать: CL | DM;

Вниз

Сервер-клиент прием-передача   Найти похожие ветки 

 
paradox01   (2007-03-14 08:17) [0]

К серверу подключаются несколько пользователей. Сервер отправляет им файлы. После полного получения файла клиент должен сообщить об этом серверу, и сервер отправляет следующий файл этому клиенту. В случае разрыва связи сервер должен ждать подключения этого клиента и передать ему тот файл, которую не удалось передать. Ну, типа сервер и клиент должны поддерживать докачку. Компоненты: ServerSocket, ClientSocket; Протокол: TCP. Как это можно реализовать, дайте советы. Если есть готовы пример дайте ссылку, плиз.


 
Сергей М. ©   (2007-03-14 08:40) [1]


> сервер должен ждать подключения этого клиента


Как твой сервер будет идентифицировать этого клиента ?


 
G_M_S ©   (2007-03-14 09:47) [2]


> Ну, типа сервер и клиент должны поддерживать докачку.

Создаешь тип record (или класс, как удобнее, но ИМХО рекорда тут хватит), в который записываешь: соккет клиента, текущий файл, текущую ПОЗИЦИЮ в файле и некий ID сессии - уникальное большое число. Ну или хэш MD от строки "время подключения+IP клиента" - уникальность будет соблюдена на 100%.

Далее создаешь динамический массив (или список, хотя массив проще и удобнее) таких записей, и при подключении клиента добавляешь туда элемент с заполненными полями (при этом клиенту передаешь ID сессии, что б он мог в последствии ее восстановить). В цикле читаешь файл по кускам (например, по 1024 байта) и кидаешься ими в клиента. При этом клиенту СРАЗУ передаешь размер файла и имя, а себе пишешь только текущее ПЕРЕДАННОЕ количество байтов (счетчик наращиваешь после корректной передачи). И все.


 
Empleado ©   (2007-03-14 11:12) [3]

Ну или, как вариант, примерно та же самая структура, которую предложил G_M_S © в [2], но на стороне клиента.
Т.е. первая часть его поста реализуется на клиенте.
Т.е. клиенту передается название файла и размер, а он уже запрашивает файл по пакетам и ведет статистику закаченного.
Тогда не надо создавать и хранить дополнительную динамическую структуру на сервере, описывающую открытые и незаконченные сессии.
Т.е. серверу пофигу, что запрашивают и в каком состоянии оно находится; его дело передать то, что запросили. Обо всем остальном заботится клиент.


 
G_M_S ©   (2007-03-14 17:47) [4]


> Т.е. серверу пофигу, что запрашивают и в каком состоянии
> оно находится; его дело передать то, что запросили. Обо
> всем остальном заботится клиент.

При большом количестве пользователей вполне оправданная тактика. Единственное: надо будет дополнительно реализовать команды получения размера файла и даты последнего изменения (на случай, если он изменился пока мы были в оффлайне).

А вообще при таких достаточно сложных задачах проще поюзать готовый фтп-сервер (можно даже IdFTPserver) и IdFTP клиент. Хотя не уверен, что они поддерживают докачку отдельного файла (не заморачивался на эту тему), но докачать файлы из списка, а не весь список точно получится.


 
paradox01   (2007-03-15 11:14) [5]

У меня в задаче список отправляемых файлов заранее не известно. Файлы создаются другой программой. Эта программа по ходу поступления с устройства определенных сигналов формирует файл и кладет этот файл в определенную папку. Программа сервер следит за изменением этой папки и добавляет, поступивши файл в свой список. Вопрос: в IdFTPserver-е можно это автоматизировать. И чтобы при разрыве связи через определенное время клиент автоматически попытался бы соединится с сервером.


 
Сергей М. ©   (2007-03-15 14:40) [6]


> Вопрос: в IdFTPserver-е можно это автоматизировать


Нельзя.
Но pfghjcnj можно в MySuperPuperApplication, использующем IdFTPserver для FTP-транспорта


 
paradox01   (2007-03-15 18:55) [7]


> > Вопрос: в IdFTPserver-е можно это автоматизироватьНельзя.
> Но pfghjcnj можно в MySuperPuperApplication, использующем
> IdFTPserver для FTP-транспорта

Неправильный вопрос…. Извиняюсь!

Есть такие готовые сервера и соответственно клиент приложение?



Страницы: 1 вся ветка

Текущий архив: 2007.11.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.028 c
2-1193567128
MaximusI
2007-10-28 13:25
2007.11.18
TExcelApplication


15-1192126469
cber
2007-10-11 22:14
2007.11.18
Помогите решить задачу по тер-веру


15-1192667401
Slider007
2007-10-18 04:30
2007.11.18
С днем рождения ! 18 октября 2007 четверг


15-1190725346
Piter
2007-09-25 17:02
2007.11.18
Синхронизация в PHP, многопоточность


15-1192555640
Galinka
2007-10-16 21:27
2007.11.18
CORBA: книги