Форум: "Сети";
Текущий архив: 2007.11.18;
Скачать: [xml.tar.bz2];
ВнизСервер-клиент прием-передача Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.043 c