![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сервер-клиент прием-передача
paradox01 © (2007-03-14 08:17:00)К серверу подключаются несколько пользователей. Сервер отправляет им файлы. После полного получения файла клиент должен сообщить об этом серверу, и сервер отправляет следующий файл этому клиенту. В случае разрыва связи сервер должен ждать подключения этого клиента и передать ему тот файл, которую не удалось передать. Ну, типа сервер и клиент должны поддерживать докачку. Компоненты: ServerSocket, ClientSocket; Протокол: TCP. Как это можно реализовать, дайте советы. Если есть готовы пример дайте ссылку, плиз.
paradox01 (2007-03-15 18:55:00) [1]
> > Вопрос: в IdFTPserver-е можно это автоматизироватьНельзя.
> Но pfghjcnj можно в MySuperPuperApplication, использующем
> IdFTPserver для FTP-транспорта
Неправильный вопрос…. Извиняюсь!
Есть такие готовые сервера и соответственно клиент приложение?
Сергей М. (2007-03-15 14:40:00) [2]
> Вопрос: в IdFTPserver-е можно это автоматизировать
Нельзя.
Но pfghjcnj можно в MySuperPuperApplication, использующем IdFTPserver для FTP-транспорта
paradox01 (2007-03-15 11:14:00) [3]У меня в задаче список отправляемых файлов заранее не известно. Файлы создаются другой программой. Эта программа по ходу поступления с устройства определенных сигналов формирует файл и кладет этот файл в определенную папку. Программа сервер следит за изменением этой папки и добавляет, поступивши файл в свой список. Вопрос: в IdFTPserver-е можно это автоматизировать. И чтобы при разрыве связи через определенное время клиент автоматически попытался бы соединится с сервером.
G_M_S (2007-03-14 17:47:00) [4]
> Т.е. серверу пофигу, что запрашивают и в каком состоянии
> оно находится; его дело передать то, что запросили. Обо
> всем остальном заботится клиент.
При большом количестве пользователей вполне оправданная тактика. Единственное: надо будет дополнительно реализовать команды получения размера файла и даты последнего изменения (на случай, если он изменился пока мы были в оффлайне).
А вообще при таких достаточно сложных задачах проще поюзать готовый фтп-сервер (можно даже IdFTPserver) и IdFTP клиент. Хотя не уверен, что они поддерживают докачку отдельного файла (не заморачивался на эту тему), но докачать файлы из списка, а не весь список точно получится.
Empleado (2007-03-14 11:12:00) [5]Ну или, как вариант, примерно та же самая структура, которую предложил G_M_S © в [2], но на стороне клиента.
Т.е. первая часть его поста реализуется на клиенте.
Т.е. клиенту передается название файла и размер, а он уже запрашивает файл по пакетам и ведет статистику закаченного.
Тогда не надо создавать и хранить дополнительную динамическую структуру на сервере, описывающую открытые и незаконченные сессии.
Т.е. серверу пофигу, что запрашивают и в каком состоянии оно находится; его дело передать то, что запросили. Обо всем остальном заботится клиент.
G_M_S (2007-03-14 09:47:00) [6]
> Ну, типа сервер и клиент должны поддерживать докачку.
Создаешь тип record (или класс, как удобнее, но ИМХО рекорда тут хватит), в который записываешь: соккет клиента, текущий файл, текущую ПОЗИЦИЮ в файле и некий ID сессии - уникальное большое число. Ну или хэш MD от строки "время подключения+IP клиента" - уникальность будет соблюдена на 100%.
Далее создаешь динамический массив (или список, хотя массив проще и удобнее) таких записей, и при подключении клиента добавляешь туда элемент с заполненными полями (при этом клиенту передаешь ID сессии, что б он мог в последствии ее восстановить). В цикле читаешь файл по кускам (например, по 1024 байта) и кидаешься ими в клиента. При этом клиенту СРАЗУ передаешь размер файла и имя, а себе пишешь только текущее ПЕРЕДАННОЕ количество байтов (счетчик наращиваешь после корректной передачи). И все.
Сергей М. (2007-03-14 08:40:00) [7]
> сервер должен ждать подключения этогоклиента
Как твой сервер будет идентифицировать этогоклиента ?