crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> Прием данных по сокету. Какие конвенции лучше?
Влад
  опции профиля:
сообщение 10.12.2011, 19:19
Сообщение #11


Участник
**

Группа: Участник
Сообщений: 146
Регистрация: 20.3.2009
Из: Санкт-Петербург
Пользователь №: 627

Спасибо сказали: 46 раз(а)




Репутация:   8  


Гмм. Что-то это из категории загадок.... :-)

Во-первых, в TCP нет никаких "пакетов" - т.к. это потоковый протокол передачи данных. Во-вторых, крайне удивительно, что "пакеты теряются" - т.к. это протокол с гарантированной доставкой.

Думаю, что нужно заниматься поиском багов в прикладном уровне.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrewshkovskii
  опции профиля:
сообщение 10.12.2011, 22:42
Сообщение #12


Активный участник
***

Группа: Участник
Сообщений: 351
Регистрация: 27.12.2008
Пользователь №: 467

Спасибо сказали: 18 раз(а)




Репутация:   1  


Цитата(Влад @ 10.12.2011, 19:19) *
Гмм. Что-то это из категории загадок.... :-)

Во-первых, в TCP нет никаких "пакетов" - т.к. это потоковый протокол передачи данных. Во-вторых, крайне удивительно, что "пакеты теряются" - т.к. это протокол с гарантированной доставкой.

Думаю, что нужно заниматься поиском багов в прикладном уровне.

А поток из чего состоит?
Т.е. Вы утверждаете, что используя TCP/IP протокол - вы никогда не потеряете фрейм с данными?Никогда-никогда? Ни при каких условиях?
Вся это гарантированная доставка для сферического коня в вакууме. Не забывайте оборудование - которое может сбоить, кабеля повреждаться и т.п..
И в догонку:
Цитата
TCP обеспечивает надёжную непрерывную передачу данных, исключающую потерю данных или нарушение порядка их поступления или дублирования, может перераспределять данные, разбивая большие порции данных на фрагменты и наоборот склеивая фрагменты в один пакет.

Ок, я не правильно назвал пакеты - порциями, тут я не прав. Суть была в том, что порция данных может потеряться, тупо оборудование засбоит и всё - не получите вы свой кусочек. Или какой-нибудь софт, вроде FW заблочит.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 10.12.2011, 22:56
Сообщение #13


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(Andrewshkovskii @ 10.12.2011, 23:42) *
Суть была в том, что порция данных может потеряться, тупо оборудование засбоит и всё - не получите вы свой кусочек. Или какой-нибудь софт, вроде FW заблочит.

Нет, порция потеряться не может. Стек контролирует порядок получения пакетов и если необходимо, будет запрашивать пакет заново.
Пока он этот пакет не получит, дальше он ничего отдавать не будет. Программа никогда не получит данные из сокета с "дыркой" посредине.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrewshkovskii
  опции профиля:
сообщение 10.12.2011, 23:49
Сообщение #14


Активный участник
***

Группа: Участник
Сообщений: 351
Регистрация: 27.12.2008
Пользователь №: 467

Спасибо сказали: 18 раз(а)




Репутация:   1  


Т.е. , если я передаю файл, скажем, 1 гб, и где-то оборудование сдохнет - я не получу ни байта от этого потока?
Я так понимаю, я получу всё до момента сбоя - а это уже фейл и провал для предложенного алгоритма.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 11.12.2011, 0:06
Сообщение #15


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Если пакет теряется - стек будет просить его перепослать. Если при этом удаленная машина перестанет отвечать, то ты получишь ошибку.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Влад
  опции профиля:
сообщение 11.12.2011, 13:05
Сообщение #16


Участник
**

Группа: Участник
Сообщений: 146
Регистрация: 20.3.2009
Из: Санкт-Петербург
Пользователь №: 627

Спасибо сказали: 46 раз(а)




Репутация:   8  


А если ты эту ошибку не обрабатываешь, то это баг в логике прикладного уровня.... Логика прикладного уровня должна быть готова к тому, что TCP соединение может в любой момент разорваться по независящим от локального хоста причинам.

(С коллегой BRE я бы поспорил только в отношении терминологии: то, что он называет "пакетом", я склонен называть "сегментом данных". :-) )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 11.12.2011, 14:35
Сообщение #17


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(Влад @ 11.12.2011, 14:05) *
(С коллегой BRE я бы поспорил только в отношении терминологии: то, что он называет "пакетом", я склонен называть "сегментом данных". :-) )

Со мной конечно можно поспорить, но в RFC793 так же частенько проскакивает так называемый "пакет", а с ним (с RFC793) спорить сложнее. ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrewshkovskii
  опции профиля:
сообщение 14.12.2011, 22:18
Сообщение #18


Активный участник
***

Группа: Участник
Сообщений: 351
Регистрация: 27.12.2008
Пользователь №: 467

Спасибо сказали: 18 раз(а)




Репутация:   1  


Сообщение перемещено Сюда

Сообщение отредактировал Andrewshkovskii - 14.12.2011, 23:33
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Ответить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.11.2024, 3:23