Главная страница
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.029 c
1-1188554380
Chaser
2007-08-31 13:59
2007.11.18
WebBrowser1 - Установка значения в элементе Select


15-1192196677
parrot
2007-10-12 17:44
2007.11.18
просто абассака (~2 мб)


2-1193378020
DevilDevil
2007-10-26 09:53
2007.11.18
TButton и WordWrap


6-1174302469
S_T_E_P_A_N___
2007-03-19 14:07
2007.11.18
Использование SOCS-прокси


4-1178967178
Дмиитрий Белькевич
2007-05-12 14:52
2007.11.18
Сеанс терминальной сессии