Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.47 MB
Время: 0.043 c
2-1193406106
Pacific
2007-10-26 17:41
2007.11.18
Ошибка в коде


4-1178892371
Zagaevskiy
2007-05-11 18:06
2007.11.18
Handle иконок рабочего стола


2-1193475742
Blind Guardian
2007-10-27 13:02
2007.11.18
Canvas у TPanel. Было или нет?


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


15-1192090157
botaniQ
2007-10-11 12:09
2007.11.18
Помогите найти алгоритм SHA-1





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский