|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Передача файла с докачкой
Здравствуйте, подскажите как передать файл через сокет. с возможностью докачать в случае разрыва соединения.
Интересует скорее алгоритм, чем программная реализация. Я вижу его так: 1 Настраиваем сокет адрес:порт;> 2 2 Делаем коннект;> 3 3 Коннект; Успешный кокнет;> 4 4 открываем файл;>5 5 устанавливаем указатель позиции файла >6 6 считываем данные в буфер, сохраняем позицию указателя файла, отсылаем данные в сокет;>7 7 ждем ответа;>7 ответ (данные приняты); сохраняем значение указателя;>5 ответ (данные не приняты -"ошибка")отправляем еще раз;>5 ответ (файл принят) завершаем передачу;>8 8 Дисконект сокета. Вопрос в следующем как разграничить данные в сокете? Такие как: 1. Команды ("отправленную порцию принял успешно, давай еще ";"верни размер файла который принимаешь" и т.п.) 2 .Данные (порции файла) Надеюсь понятно |
#2
|
||||
|
||||
Цитата:
-заголовок с размером данных -данные как, опять же к примеру, у HTTP следано. Пишу программы за еду. __________________ |
#3
|
|||
|
|||
Цитата:
Например - команда|размер данных|разделитель|данные. upload|6|;|121SDA Выглядеть будет так upload6;121SDA но если сплошной поток данных содержать такую же конструкцию как команда пример upload|10|;|121SDAзщшфуupload8;кукн6ц45н2 то будет неразбериха upload10;121SDAзщшфуupload8;кукн6ц45н2 это уже не следующая команда а часть данных, а воспримется как команда Вот как то нужно разделить, что бы небыло неразберихи |
#4
|
||||
|
||||
так если известен размер данных (передается в заголовке), то разделить непрерывный поток не составит труда.
Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
alanatolich (27.12.2013)
|
#5
|
|||
|
|||
Да верно что то, не подумал) TCP гарантирует целостность данных и обрывками информация придти не сможет.
я боялся что вдруг при сбое в передаче строка такого вида upload10;121SDAзщшфуupload8;кукн6ц45н2 например придет - шфуupload8;кукн6ц45н2 и неверно обработается привык к низкоуровневому обмену, где нет гарантии доставки данных СПАСИБО ОГРОМНОЕ ПОМОГЛИ |
#6
|
||||
|
||||
TCP гарантирует достоверность переданных данных, но не аналогичность переданных пакетов принятым. т.е. несколько последовательно переданных пакетов могут быть (а скорее всего так и будет) разбиты на пакеты другой длины и другое их количество. но общая последовательность принятых данных будет соответствовать переданной.
Пишу программы за еду. __________________ |