Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.12.2013, 13:32
alanatolich alanatolich вне форума
Прохожий
 
Регистрация: 24.12.2013
Сообщения: 18
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию Передача файла с докачкой

Здравствуйте, подскажите как передать файл через сокет. с возможностью докачать в случае разрыва соединения.
Интересует скорее алгоритм, чем программная реализация.

Я вижу его так:
1 Настраиваем сокет адрес:порт;> 2
2 Делаем коннект;> 3
3 Коннект;
Успешный кокнет;> 4
4 открываем файл;>5
5 устанавливаем указатель позиции файла >6
6 считываем данные в буфер, сохраняем позицию указателя файла, отсылаем данные в сокет;>7
7 ждем ответа;>7
ответ (данные приняты); сохраняем значение указателя;>5
ответ (данные не приняты -"ошибка")отправляем еще раз;>5
ответ (файл принят) завершаем передачу;>8
8 Дисконект сокета.

Вопрос в следующем как разграничить данные в сокете? Такие как:
1. Команды ("отправленную порцию принял успешно, давай еще ";"верни размер файла который принимаешь" и т.п.)
2 .Данные (порции файла)

Надеюсь понятно
Ответить с цитированием
  #2  
Старый 27.12.2013, 14:03
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от alanatolich
Вопрос в следующем как разграничить данные в сокете?
реализовать поверх протокола TCP/IP свой протокол. к примеру:
-заголовок с размером данных
-данные

как, опять же к примеру, у HTTP следано.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 27.12.2013, 14:29
alanatolich alanatolich вне форума
Прохожий
 
Регистрация: 24.12.2013
Сообщения: 18
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

Цитата:
реализовать поверх протокола TCP/IP свой протокол. к примеру:
-заголовок с размером данных
-данные

Например - команда|размер данных|разделитель|данные.

upload|6|;|121SDA Выглядеть будет так upload6;121SDA

но если сплошной поток данных содержать такую же конструкцию как команда

пример upload|10|;|121SDAзщшфуupload8;кукн6ц45н2
то будет неразбериха upload10;121SDAзщшфуupload8;кукн6ц45н2
это уже не следующая команда а часть данных, а воспримется как команда

Вот как то нужно разделить, что бы небыло неразберихи
Ответить с цитированием
  #4  
Старый 27.12.2013, 14:33
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

так если известен размер данных (передается в заголовке), то разделить непрерывный поток не составит труда.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
alanatolich (27.12.2013)
  #5  
Старый 27.12.2013, 14:53
alanatolich alanatolich вне форума
Прохожий
 
Регистрация: 24.12.2013
Сообщения: 18
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

Да верно что то, не подумал) TCP гарантирует целостность данных и обрывками информация придти не сможет.
я боялся что вдруг при сбое в передаче строка такого вида

upload10;121SDAзщшфуupload8;кукн6ц45н2

например придет - шфуupload8;кукн6ц45н2 и неверно обработается

привык к низкоуровневому обмену, где нет гарантии доставки данных

СПАСИБО ОГРОМНОЕ ПОМОГЛИ
Ответить с цитированием
  #6  
Старый 27.12.2013, 17:41
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

TCP гарантирует достоверность переданных данных, но не аналогичность переданных пакетов принятым. т.е. несколько последовательно переданных пакетов могут быть (а скорее всего так и будет) разбиты на пакеты другой длины и другое их количество. но общая последовательность принятых данных будет соответствовать переданной.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:19.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter