Прием данных по сокету. Какие конвенции лучше? |
Здравствуйте, гость ( Вход | Регистрация )
Прием данных по сокету. Какие конвенции лучше? |
Влад |
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 |
Гмм. Что-то это из категории загадок.... :-) Во-первых, в TCP нет никаких "пакетов" - т.к. это потоковый протокол передачи данных. Во-вторых, крайне удивительно, что "пакеты теряются" - т.к. это протокол с гарантированной доставкой. Думаю, что нужно заниматься поиском багов в прикладном уровне. А поток из чего состоит? Т.е. Вы утверждаете, что используя TCP/IP протокол - вы никогда не потеряете фрейм с данными?Никогда-никогда? Ни при каких условиях? Вся это гарантированная доставка для сферического коня в вакууме. Не забывайте оборудование - которое может сбоить, кабеля повреждаться и т.п.. И в догонку: Цитата TCP обеспечивает надёжную непрерывную передачу данных, исключающую потерю данных или нарушение порядка их поступления или дублирования, может перераспределять данные, разбивая большие порции данных на фрагменты и наоборот склеивая фрагменты в один пакет. Ок, я не правильно назвал пакеты - порциями, тут я не прав. Суть была в том, что порция данных может потеряться, тупо оборудование засбоит и всё - не получите вы свой кусочек. Или какой-нибудь софт, вроде FW заблочит. |
|
|
BRE |
10.12.2011, 22:56
Сообщение
#13
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Суть была в том, что порция данных может потеряться, тупо оборудование засбоит и всё - не получите вы свой кусочек. Или какой-нибудь софт, вроде 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 |
(С коллегой BRE я бы поспорил только в отношении терминологии: то, что он называет "пакетом", я склонен называть "сегментом данных". :-) ) Со мной конечно можно поспорить, но в RFC793 так же частенько проскакивает так называемый "пакет", а с ним (с RFC793) спорить сложнее. |
|
|
Andrewshkovskii |
14.12.2011, 22:18
Сообщение
#18
|
Активный участник Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1 |
|
|
|
Текстовая версия | Сейчас: 28.11.2024, 3:23 |