реклама на сайте
подробности

 
 
> TCP или UDP?, Подскажите способ реализации
gladov
сообщение Dec 28 2007, 06:36
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687



Поздравляю всех с наступающими праздниками!!! santa2.gif

А вопрос у меня такой. Есть классическая ситуация - некоторое устройство управляется компом по сети, причем находятся они в одной локалке, т.е. все быстро и условно надежно. Устройство получает от компа команды, возвращает результаты замеров, статусы и проч. Встает вопрос что использовать: TCP или UDP?

В пользу TCP говорит тот факт, что не надо проверять доставку (а иногда важная команда должна быть обязательно доставлена, причем выполнена только один раз). Тут появляется большое "но". Фактически, те данные, которые я буду передавать (например, команды) - это пакеты. Т.е. явная пакетная передача данных. А TCP потоковый! Он мне даже не скажет, где одна команда закончилась и новая началась. Т.е. мне надо вводить некий механизм синхронизации чтобы отлавливать начало очередного пакета.
Первое что в голову приходит - самому на своем уровне добавлять в пакет его длину. Но если одна из сторон хоть раз ошибется или сетка сглючит и длина пакета окажется неправильной, то я никогда уже не поймаю начало очередного пакета.
Можно вместо длины (или вместе с ней) пометить сигнатурой начало пакета, а в самом пакете делать байт-стаффинг чтобы она там не повторилась. Не нравится - как-то тяжеловесно получается.
Можно сделать по UDP, но там придется городить подтверждение доставки и контроль на недублирование пакетов. Тоже гемор.
Короче, варианты решения я вижу, но все они мне не нравятся. Мне кажется, что есть какое-то простое и красивое решение, а я заблудился в трех соснах. Т.к. ситуация классическая для большинства встроенных систем, поделитесь плз опытом, кто как решает подобные задачи.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Aprox
сообщение Jan 9 2008, 12:23
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 374
Регистрация: 7-11-07
Из: Moscow
Пользователь №: 32 131



Может, я чего-то не понимаю в тонкостях задачи, но по-моему самый распространённый метод управления прибором по Ethernet- это встроенный в прибор WEB сервер. Максимальная степень отлаженности решения и практически стопроцентная готовность. Ничего не надо изобретать самому и вообще разбираться с TCP и UDP. Если кроме управления нужно еще принимать данные от прибора, то на помощь приходят "HTTPзапросы", которые используются в броузерах по технологии Ajax или Flash. smile.gif
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jan 10 2008, 06:44
Сообщение #3


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата(Aprox @ Jan 9 2008, 14:23) *
Может, я чего-то не понимаю в тонкостях задачи, но по-моему самый распространённый метод управления прибором по Ethernet- это встроенный в прибор WEB сервер.


Это хорошо для начальной конфигурации прибора и для прямого управления пользователем (что-нибудь включить/выключить, например). А если вам сырые данные надо из прибора в софт на компе передавать, то HTTP - это только лишний уровень, толку от него - никакого.

Цитата
Максимальная степень отлаженности решения и практически стопроцентная готовность. Ничего не надо изобретать самому и вообще разбираться с TCP и UDP.


Это если у Вас прибор с мозгом, на котором можно никса с апачем поднять, например, тогда можно говорить об "Максимальной степени..."

Цитата
Если кроме управления нужно еще принимать данные от прибора, то на помощь приходят "HTTPзапросы", которые используются в броузерах по технологии Ajax или Flash. smile.gif


А вот это костыль, предназначеный для преодоления изначально статической природы HTTP/HTML. Который совсем не нужен для того, чтобы носить данные из прибора в обрабатывающую программу. Да и вообще, термин "HTTP-запросы" не есть прерогатива аякса или флеша, это и есть название одной из стадий обмена информацией по протоколу HTTP.

И вообще, я считаю, что организовывать web-сервер в приборе имеет смысл только для избавления от софта верхнего уровня на компе, причем софт этот используется для визуализации данных. В этом случае браузер используется в качестве некоего терминала, а вам не надо писать софт верхнего уровня (актуально, например, если хост может работать как под линухом, там и под виндой). Однако, тут много своих граблей - например, разная интрерпретация разными браузерами HTML-кода, особенно, с новомодными примочками, или реализация digest-авторизации - везде разная, и полностью RFC не соответствующая (хорошо, если просто чего-то не выполняется, Опера, например, не поддерживает ключ next_nonce, а IE только с 7го начал поддерживать такую авторизацию, да только совсем вольно трактует мелкософт понятие URL, а для своего прибора еле нашел консольный браузер под никсы, который вообще асиливает digest - ведь одмины у нас страсть как не любят окошки smile.gif )... короче, грабли, грабли, и еще грабли...


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
vvs157
сообщение Jan 10 2008, 12:03
Сообщение #4


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

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



Цитата(Rst7 @ Jan 10 2008, 09:44) *
Это хорошо для начальной конфигурации прибора и для прямого управления пользователем (что-нибудь включить/выключить, например). А если вам сырые данные надо из прибора в софт на компе передавать, то HTTP - это только лишний уровень, толку от него - никакого.
Используйте протокол Telnet. Прост до неприличия, работать при желании (отладка, например) можно из большинства терминальных программ для связи по RS-232. Достоверность данных обеспечивается протоколом TCP и можете не заморачивать себе голову. Я ни разу не видел, чтоб при связи по Telnet'у данные искажались даже на очень полохой линии.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jan 10 2008, 12:39
Сообщение #5


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата(vvs157 @ Jan 10 2008, 14:03) *
Используйте протокол Telnet. Прост до неприличия, работать при желании (отладка, например) можно из большинства терминальных программ для связи по RS-232. Достоверность данных обеспечивается протоколом TCP и можете не заморачивать себе голову. Я ни разу не видел, чтоб при связи по Telnet'у данные искажались даже на очень полохой линии.


Вот тут тоже не согласен. Зачем человеку брать бинарные данные, делать из них ASCII-коды, передавать, на приемной стороне делать из ASCII-данных бинарные и обрабатывать их дальше? Это все ради того, чтобы на начальном этапе увидеть эти данные в Telnet? А потом будет просто какой-то софт верхнего уровня? Да и отладить сейчас софт на большом брате проблем нет никаких - все среды с отладчиками, терминальная отладка особо не нужна.

Результат повальных увлечений терминалом вообще плачевный - просто так пропускную способность канала опускают в два раза, а потом в других темах меряются пиписьками, как быстрее напечатать unsigned short в десятичную строку biggrin.gif . Хотя struct OUT_DATA {... ... .. . } buf; send(sock,&buf,sizeof(buf),0) проще всего...


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- gladov   TCP или UDP?   Dec 28 2007, 06:36
- - Postoroniy_V   Цитата(gladov @ Dec 28 2007, 15:36) Поздр...   Dec 28 2007, 07:57
|- - gladov   Цитата(Postoroniy_V @ Dec 28 2007, 10:57)...   Dec 29 2007, 21:35
|- - Postoroniy_V   Цитата(gladov @ Dec 30 2007, 06:35) Это з...   Dec 30 2007, 05:37
|- - tag   Цитата(gladov @ Dec 30 2007, 00:35) Читал...   Jan 10 2008, 07:36
|- - gladov   Цитата(tag @ Jan 10 2008, 10:36) ...есть ...   Jan 10 2008, 10:56
- - Rst7   ЦитатаНо если одна из сторон хоть раз ошибется или...   Dec 28 2007, 08:18
- - tag   ...вы противоречите сами себе. Если TCP гарантируе...   Dec 28 2007, 08:28
- - iosifk   Цитата(gladov @ Dec 28 2007, 09:36) Поздр...   Dec 28 2007, 09:30
- - KRS   Цитата(gladov @ Dec 28 2007, 09:36) А TCP...   Dec 28 2007, 11:20
- - Rst7   ЦитатаПорядок безусловно будет соблюден, но кто га...   Dec 30 2007, 12:54
||- - vvs157   Цитата(Rst7 @ Jan 10 2008, 15:39) Вот тут...   Jan 10 2008, 16:58
|- - Aprox   Цитата(Rst7 @ Jan 10 2008, 09:44) Это хор...   Jan 10 2008, 17:17
- - Rst7   ЦитатаВопрос традиций Вот и я думаю, зачем челове...   Jan 11 2008, 06:28
|- - vvs157   Цитата(Rst7 @ Jan 11 2008, 09:28) Вот и я...   Jan 11 2008, 12:20
||- - Rst7   Цитата(vvs157 @ Jan 11 2008, 14:20) Весьм...   Jan 11 2008, 12:39
||- - gladov   Цитата(Rst7 @ Jan 11 2008, 15:39) Давай м...   Jan 11 2008, 20:56
||- - vvs157   Цитата(gladov @ Jan 11 2008, 23:56) Полно...   Jan 11 2008, 21:37
||- - Kirill Frolov   Цитата(gladov @ Jan 11 2008, 23:56) Полно...   Jan 12 2008, 08:46
||- - Aprox   Цитата(gladov @ Jan 11 2008, 23:56) Полно...   Jan 14 2008, 08:36
||- - blackfin   Цитата(Aprox @ Jan 14 2008, 11:36) ... до...   Jan 14 2008, 08:52
||- - Aprox   Цитата(blackfin @ Jan 14 2008, 11:52) Ага...   Jan 14 2008, 10:48
|- - Aprox   Цитата(Rst7 @ Jan 11 2008, 09:28) HTML ст...   Jan 11 2008, 13:45
- - Kirill Frolov   Цитата(gladov @ Dec 28 2007, 09:36) В пол...   Jan 11 2008, 14:01
- - Rst7   ЦитатаКогда начинаются разговоры, о том дескать, ч...   Jan 12 2008, 09:31
|- - vvs157   Цитата(Rst7 @ Jan 12 2008, 12:31) А может...   Jan 12 2008, 21:36
|- - Kirill Frolov   Цитата(Rst7 @ Jan 12 2008, 12:31) Я тоже ...   Jan 13 2008, 08:20
- - blackfin   Цитата(Kirill Frolov @ Jan 11 2008, 17:01...   Jan 12 2008, 09:36
- - Rst7   ЦитатаНа телнет неделю? Об этом - чуть ниже, не В...   Jan 13 2008, 12:31
|- - Kirill Frolov   Цитата(Rst7 @ Jan 13 2008, 15:31) Допусти...   Jan 13 2008, 17:47
|- - vvs157   Цитата(Rst7 @ Jan 13 2008, 15:31) А Вы за...   Jan 13 2008, 21:00
- - Rst7   ЦитатаУгу. Ошибка. Такое в реальной жизни не работ...   Jan 13 2008, 18:35
- - Rst7   Цитатагадить потребителю тоже не подобает серьезны...   Jan 14 2008, 06:32
- - Rst7   ЦитатаНа "низшей меге" реализовать полно...   Jan 14 2008, 09:09
|- - blackfin   Цитата(Rst7 @ Jan 14 2008, 12:09) Ну это ...   Jan 14 2008, 09:52
- - GL_basik   Вставлю свои 5 копеек.... Если надо бытро и легко ...   Jan 17 2008, 10:07
|- - Aprox   Цитата(GL_basik @ Jan 17 2008, 13:07) Вст...   Jan 17 2008, 16:12
|- - Dog Pawlowa   Без рассмотрения: - структуры прибора - объема пе...   Jan 17 2008, 16:35
|- - blackfin   Цитата(Aprox @ Jan 17 2008, 19:12) По это...   Jan 17 2008, 16:52
|- - Aprox   Цитата(blackfin @ Jan 17 2008, 19:52) Сра...   Jan 18 2008, 08:21
|- - blackfin   Цитата(Aprox @ Jan 18 2008, 11:21) Необхо...   Jan 18 2008, 09:01
|- - Aprox   Цитата(blackfin @ Jan 18 2008, 12:01) При...   Jan 18 2008, 16:13
|- - blackfin   Цитата(Aprox @ Jan 18 2008, 19:13) Делаю ...   Jan 19 2008, 10:38
|- - Aprox   Цитата(blackfin @ Jan 19 2008, 13:38) Нов...   Jan 20 2008, 16:29
- - Rst7   ЦитатаПо этой причине, конструкторам малых систем...   Jan 17 2008, 16:27
- - GL_basik   Если есть время сначала создавать устройство, пото...   Jan 18 2008, 09:09
- - Rst7   Цитатано ограничение на максимальное кол-во хостов...   Jan 19 2008, 13:46
|- - blackfin   Цитата(Rst7 @ Jan 19 2008, 16:46) Это отк...   Jan 19 2008, 17:23
- - Rst7   ЦитатаА что, существуют switch'и на большее чи...   Jan 19 2008, 18:27
- - prottoss   Привет всем! Прочитал в теме про упоминание A...   Feb 8 2008, 13:22
|- - Aprox   Цитата(prottoss @ Feb 8 2008, 16:22) Прив...   Feb 9 2008, 15:04
|- - Aprox   Цитата(Aprox @ Feb 9 2008, 18:04) Я польз...   Feb 10 2008, 08:13
|- - prottoss   Цитата(Aprox @ Feb 10 2008, 15:13) дабы н...   Feb 10 2008, 09:21
- - Rst7   ЦитатаВозможно у кого нибудь есть наработки по это...   Feb 8 2008, 13:42
|- - prottoss   Цитата(Rst7 @ Feb 8 2008, 20:42) Наработо...   Feb 8 2008, 13:51
- - prottoss   Все оказалось на много проще, чем я думал....пока ...   Feb 8 2008, 15:46
- - Rst7   ЦитатаКогда все отработаю, естественно встанет воп...   Feb 10 2008, 13:00


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

 


RSS Текстовая версия Сейчас: 24th June 2025 - 23:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01437 секунд с 7
ELECTRONIX ©2004-2016