![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | 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 гарантирует достоверность переданных данных, но не аналогичность переданных пакетов принятым. т.е. несколько последовательно переданных пакетов могут быть (а скорее всего так и будет) разбиты на пакеты другой длины и другое их количество. но общая последовательность принятых данных будет соответствовать переданной. 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 |