|
|
  |
TCP или UDP?, Подскажите способ реализации |
|
|
|
Jan 10 2008, 17:17
|

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

|
Цитата(Rst7 @ Jan 10 2008, 09:44)  Это хорошо для начальной конфигурации прибора и для прямого управления пользователем (что-нибудь включить/выключить, например). А если вам сырые данные надо из прибора в софт на компе передавать, то HTTP - это только лишний уровень, толку от него - никакого. Вообще-то, встроенные в прибор WEB сервера используют не статический, а динамический HTML. Цитата Это если у Вас прибор с мозгом, на котором можно никса с апачем поднять, например, тогда можно говорить об "Максимальной степени..." Уже пару лет использую в своих приборах модуль MOD5270 фирмы NetBurner площадью с пачку сигарет и ценой в $80. В нем есть практически все, что надо для развитого управления прибором, TCP/IP стек и WEB сервер с динамическим HTML. Программируется на GNU C++. Прекрасно работает, никаких нареканий. Я не считаю этот модуль чем-то очень серьезным по сложности и цене. Кроме того, появилось много кристаллов с ядром ARM9, и для многих в качестве стандартного примера прилагается WEB сервер на С. Иными словами, совсем не так угрюмо и мрачно обстоит дело с HW для web-серверов. Цитата А вот это костыль, предназначеный для преодоления изначально статической природы HTTP/HTML. Который совсем не нужен для того, чтобы носить данные из прибора в обрабатывающую программу. Да и вообще, термин "HTTP-запросы" не есть прерогатива аякса или флеша, это и есть название одной из стадий обмена информацией по протоколу HTTP. В технологии flash мне удалось реализовать что-то вроде осциллографа, данные для прорисовки которому поступали от удаленного WEB сервера. Запрос и прием данных работает с очень приличной скоростью. Я могу ошибаться в терминах, но это работает. Цитата И вообще, я считаю, что организовывать web-сервер в приборе имеет смысл только для избавления от софта верхнего уровня на компе, причем софт этот используется для визуализации данных. В этом случае браузер используется в качестве некоего терминала, а вам не надо писать софт верхнего уровня (актуально, например, если хост может работать как под линухом, там и под виндой). Мне представляется, web-сервер позволяет экономить время, использовать готовые технические решения и не тратить силы на изобретение велосипедов. Данный тред тому подтверждение. А что касается обработки поступающих данных, то JavaScript в HTML или ActionScript во Flash вроде удовлетворяют стандартные запросы пользователя. Цитата Однако, тут много своих граблей - например, разная интрерпретация разными браузерами HTML-кода, особенно, с новомодными примочками, или реализация digest-авторизации - везде разная, и полностью RFC не соответствующая (хорошо, если просто чего-то не выполняется, Опера, например, не поддерживает ключ next_nonce, а IE только с 7го начал поддерживать такую авторизацию, да только совсем вольно трактует мелкософт понятие URL, а для своего прибора еле нашел консольный браузер под никсы, который вообще асиливает digest - ведь одмины у нас страсть как не любят окошки  )... короче, грабли, грабли, и еще грабли... Hе знаю. Ни разу не сталкивался с такими проблемами. Рисуешь странички в DreamWeaver или в Macromedia Flash, тестируешь в IE и Firefox, закачиваешь в web-server, и все потом нормально работает в тех же самых броузерах на самых разных компах. Hу разве что, придется в IE разрешить ActiveX, или отключить блокировку POP-up окон. digest-авторизацию не использую, поэтому с проблемами не знаком.
|
|
|
|
|
Jan 11 2008, 06:28
|

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

|
Цитата Вопрос традиций Вот и я думаю, зачем человеку поступать согласно традициям 30-50летней давности? Тем более, что не прозвучало ни слова о необходимости какой-либо совместимости. Цитата Вообще-то, встроенные в прибор WEB сервера используют не статический, а динамический HTML. HTML статичен по определению. Все остальное - сугубо костыли для обеспечения динамики. Цитата В технологии flash мне удалось реализовать что-то вроде осциллографа, данные для прорисовки которому поступали от удаленного WEB сервера. Запрос и прием данных работает с очень приличной скоростью. Я могу ошибаться в терминах, но это работает. Нет вопросов, идея достойная. Но, насколько я понимаю автора темы, у него есть задача передать данные из устройства в компьютер, в софт верхнего уровня (и обратно). Мало ли что он будет с этими данными делать? Да хоть пид-регулятор, например. Тоже будете на флеше организовывать?  Цитата IE и Firefox Есть еще много разных других браузеров.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Jan 11 2008, 12:39
|

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

|
Цитата(vvs157 @ Jan 11 2008, 14:20)  Весьма современное телекоммуникационное оборудование и по сей день очень часто имеет порт для конфигурирования с Telnet'ом. По поводу традиций. Эта традиция может считаться устаревшей только при замене на WEB интерфейс, так как иметь под каждое устройство специальую программу крайне не удобно. Моя точка зрения - ни при каких условиях уупрощение жизни программиста или разработчика не должно идти в ущерб интересов потребителя. Давай мы попробуем узнать у автора темы, нужна ли ему возможность работы через Telnet, а точнее - пользоваться Telnet'ом для просмотра данных, передаваемых прибором, и отправки команд этому прибору. Мне что-то подсказывает - не нужна. Правда, он нас за ответы уже поблагодарил, но думаю, еще сюда зайдет.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Jan 11 2008, 13:45
|

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

|
Цитата(Rst7 @ Jan 11 2008, 09:28)  HTML статичен по определению. Все остальное - сугубо костыли для обеспечения динамики. Технология Ajax для JavaScript была как раз и рождена для придания пущей динамики страницам на HTML. Цитата Нет вопросов, идея достойная. Но, насколько я понимаю автора темы, у него есть задача передать данные из устройства в компьютер, в софт верхнего уровня (и обратно). Мало ли что он будет с этими данными делать? Да хоть пид-регулятор, например. Тоже будете на флеше организовывать?  Да, буду всю обработку делать на ActionScript для Flash. Изюминка в том, что: и данные, и программа обработки- загружаются в компьютер из удаленного прибора в тот момент, когда броузером входите на страничку WEB-сервера. Таким образом, всегда существует полное соответствие версий данных и программы обработки. Потому, что лежат в одном месте, неразрывно связанные с прибором. Поставил другой прибор на это место- система будет продолжать работать. Очевидный плюс для сопровождения изделия, для наращивания или модификации. Что касается вашего примера с реализацией пид-регулятора на центральном компьютере, то выглядит он слегка архаично. Это задача локального контроллера. Цитата Есть еще много разных других браузеров. Есть конечно. Hо другие на практике мне не встречались. И требования от заказчика на другие броузеры не поступало.
|
|
|
|
|
Jan 11 2008, 14:01
|

Частый гость
 
Группа: Новичок
Сообщений: 111
Регистрация: 10-02-07
Из: St.Petersburg, Russia
Пользователь №: 25 241

|
Цитата(gladov @ Dec 28 2007, 09:36)  В пользу TCP говорит тот факт, что не надо проверять доставку (а иногда важная команда должна быть обязательно доставлена, причем выполнена только один раз). TCP соединения тоже бывают рвуться. Особенно в ОС windows... Цитата Тут появляется большое "но". Фактически, те данные, которые я буду передавать (например, команды) - это пакеты. Т.е. явная пакетная передача данных. А TCP потоковый! Он мне даже не скажет, где одна команда закончилась и новая началась. Одна команда закончилась в её конце, а следующий байт -- следующая команда. Вроде очевидно... Цитата Т.е. мне надо вводить некий механизм синхронизации чтобы отлавливать начало очередного пакета. ЗАЧЕМ? Можете ввести байт-разделитель (например \n, если команды текстом даются). Можете использовать "признак срочных данных" для маркировки каждой команды, если они не идут непрерывным потоком. Цитата Первое что в голову приходит - самому на своем уровне добавлять в пакет его длину. Но если одна из сторон хоть раз ошибется или сетка сглючит и длина пакета окажется неправильной, то я никогда уже не поймаю начало очередного пакета. Но ведь TCP -- защищённый протокол и всё такое? А если "одна из сторон ошибётся", то она и не только в этом может ошибиться. На самом деле, первое что приходит в голову -- команды текстом, строка -- команда. Проблем нет. Цитата Можно вместо длины (или вместе с ней) пометить сигнатурой начало пакета, а в самом пакете делать байт-стаффинг чтобы она там не повторилась. Не нравится - как-то тяжеловесно получается. Это называется телнет. Так тяжело, аж неподъёмно. Я всё же советую посмотреть/почитать о принципах работы telnet и rlogin. А также ftp ещё. Цитата(iosifk @ Dec 28 2007, 12:30)  У Вас есть команды определенной длины. Длина команды на нижнем уровне должна быть не более 1,5К. Из этой длины вычитаем то, что займет TCP, и все что останется - это и будет максимальной длиной ВАШЕЙ КОМАНДЫ. Теперь ВСЯ ваша команда гарантированно влезет в один пакет. man ifconfig /mtu Бред. Цитата(vvs157 @ Jan 10 2008, 19:58)  Вопрос традиций. Подавляющее число приборов с IEEE-488 (GP-IB) работают именно в текстовом формате Для этого ум иметь надо. А он приходит только с большим опытом, да и то не всегда.
--------------------
[ZX]
|
|
|
|
|
Jan 11 2008, 20:56
|
Частый гость
 
Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687

|
Цитата(Rst7 @ Jan 11 2008, 15:39)  Давай мы попробуем узнать у автора темы, нужна ли ему возможность работы через Telnet, а точнее - пользоваться Telnet'ом для просмотра данных, передаваемых прибором, и отправки команд этому прибору. Мне что-то подсказывает - не нужна. Правда, он нас за ответы уже поблагодарил, но думаю, еще сюда зайдет. Полностью согласен с Rst7. Никаких протоколов верхнего уровня (поверх ТСР) вообще нет смысла городить. Прибор представялет собой некий автоматический регулятор процесса с возможностью вмешательства оператора за компом. С прибора в комп постоянно сыпятся кучи чисел - показания датчиков. А комп их отображает оператору, который, в свою очередь, может повлиять на ход процесса. ВЕБ для этой цели может и был бы удобен, но он уже потребует значительного усложнения железа (сейчас оно очень простое - низшей меги за глаза хватает). Да и время разработки безусловно увеличится. Телнет также ничего не даст, т.к. без графической визуализации числа бесполезны, а управлять устройством без датчиков перед галзами бессмысленно. Хотя я сам приверженец линукса и его прозрачных текстовых протоколов, тут оптимально передавать голые бинарные данные.
|
|
|
|
|
Jan 12 2008, 08:46
|

Частый гость
 
Группа: Новичок
Сообщений: 111
Регистрация: 10-02-07
Из: St.Petersburg, Russia
Пользователь №: 25 241

|
Цитата(gladov @ Jan 11 2008, 23:56)  Полностью согласен с Rst7. Никаких протоколов верхнего уровня (поверх ТСР) вообще нет смысла городить. Можно конечно ещё в книжку ткнуть пальцем, где про 7-уровневую модель и всё такое. "Никаких протоколов кроме 802.3 не надо..." -- вполне эквиэвалентное по абсурдности утверждение. Когда начинаются разговоры, о том дескать, что никаких протоколов не надо -- всё сводится либо к форматам (плюс какой-то неопределённый алгоритм обмена данными с использованием оных), либо к какой-то форме RPC. В последней случае действительно "протоколов не надо", они диктуются уровнем RPC (XML-RPC, DCOM, Corba, SOAP...) Вместо них появляются типы данных, объекты, методы... Классы и состояния. Цитата датчиков перед галзами бессмысленно. Хотя я сам приверженец линукса и его прозрачных текстовых протоколов, тут оптимально передавать голые бинарные данные. Я на FTP ссылку не просто так давал. Там ПЕРЕДАЮТСЯ ГОЛЫЕ БИНАРНЫЕ ДАННЫЕ. В отдельном соединении. Это действительно проще, чем HTTP. Цитата(vvs157 @ Jan 12 2008, 00:37)  Я, например очень не люблю приборы, с которомы можно общаться только посредством авторской программы. Самое плохое, что такие приборы и программы не поддаются никакой автоматизации сторонними разработчиками. Ну и отладка. Что проще, отладить комплекс из программы под Win и программы в железе, либо что-то одно используя при этом элементарный телнет. Третий аспект -- бинарных данных не бывает. Байт -- абстракция верная только для данной ЭВМ. Текст более универсален. Текст позволяет без проблем передавать простые типы данных так, что они будут корректно прочитаны и представлены на обоих ЭВМ (как там число в IEEE754 вручную записать?) Экономия жалких 30% байтов имеет смысл при передаче потокового видео, а не управляющей информации.
--------------------
[ZX]
|
|
|
|
|
Jan 12 2008, 09:31
|

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

|
Цитата Когда начинаются разговоры, о том дескать, что никаких протоколов не надо -- всё сводится либо к форматам (плюс какой-то неопределённый алгоритм обмена данными с использованием оных), либо к какой-то форме RPC. В последней случае действительно "протоколов не надо", они диктуются уровнем RPC (XML-RPC, DCOM, Corba, SOAP...) Вместо них появляются типы данных, объекты, методы... Классы и состояния. Зачем человеку городить это все? Чтобы было? Цитата Я на FTP ссылку не просто так давал. Там ПЕРЕДАЮТСЯ ГОЛЫЕ БИНАРНЫЕ ДАННЫЕ. В отдельном соединении. Это действительно проще, чем HTTP. Ага, конечно. 2 соединения проще одного, причем в одном текстом команды гонять, в другом - данные? Смысл??? Цитата Самое плохое, что такие приборы и программы не поддаются никакой автоматизации сторонними разработчиками. А может человек за комплекс програмных и аппаратных средств берет деньги и ему совсем не нужны шаловливые ручки "сторонних разработчиков", которые будут там чего-то изменять в его комплексе? Рассмотрите вопрос в таком аспекте. И время, затраченное на разработку. Я тоже больше денег заработаю, если просто передам send'ом структуру и все, а не буду неделю изготавливать фронт-энд для даже просто телнета. Цитата Ну и отладка. Что проще, отладить комплекс из программы под Win и программы в железе, либо что-то одно используя при этом элементарный телнет. Вы живете в прошлом веке, уж извините. Сейчас способов отладки намного больше и результат получается быстрее, чем во времена консолей. Цитата Третий аспект -- бинарных данных не бывает. Байт -- абстракция верная только для данной ЭВМ. Текст более универсален. Текст позволяет без проблем передавать простые типы данных так, что они будут корректно прочитаны и представлены на обоих ЭВМ (как там число в IEEE754 вручную записать?) Простите, но протокол TCP/IP оперирует именно БАЙТАМИ в канале передачи. Так что это неуместное замечание. Предлагаю автору тему закрыть, а то мы тут подеремся
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Jan 12 2008, 21:36
|
Профессионал
    
Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960

|
Цитата(Rst7 @ Jan 12 2008, 12:31)  А может человек за комплекс програмных и аппаратных средств берет деньги и ему совсем не нужны шаловливые ручки "сторонних разработчиков", которые будут там чего-то изменять в его комплексе? Рассмотрите вопрос в таком аспекте. И время, затраченное на разработку. Я тоже больше денег заработаю, если просто передам send'ом структуру и все, а не буду неделю изготавливать фронт-энд для даже просто телнета. На телнет неделю? Ну-ну. Что до "шаловливых" ручек - они будут чинить это комплекс, когда автор будет уже заниаться чем-то другим. Или если это фирма - то фирма развалится. Принцип собаки на сене - очень креативный принцип. Подход "главнное бабла срубить", а потом хоть трава не расти к сожалению в нашей действительности пока живуч Цитата(Rst7 @ Jan 12 2008, 12:31)  Вы живете в прошлом веке, уж извините. Сейчас способов отладки намного больше и результат получается быстрее, чем во времена консолей. Это Вы про что? Предлагаете сниффер как универсальное средство отладки и мониторинга межприборного взаимодействия? Или быстренько изучить работу с сокетами и под любую задачу лихо писать программку на С? Да Вы просто в душе хакер! А производители измерительного оборудивания и не знают, что они обречены, ибо живут "во вчерашнем дне" обеспечивая ASCII интерфейс.
|
|
|
|
|
Jan 13 2008, 08:20
|

Частый гость
 
Группа: Новичок
Сообщений: 111
Регистрация: 10-02-07
Из: St.Petersburg, Russia
Пользователь №: 25 241

|
Цитата(Rst7 @ Jan 12 2008, 12:31)  Я тоже больше денег заработаю, если просто передам send'ом структуру и все, а не буду неделю изготавливать фронт-энд для даже просто телнета. Ага, структуру... Я б вам не доверил. Не неделю. Пол-часа. Цитата(blackfin @ Jan 12 2008, 12:36)  В контексте вопроса автора.. Если можно, попроще..  Я не нанимался отвечать на конкретные вопросы. Это, наверное, и многим тут совершенно не интересно. А пришёл, так, языком потрепать. Цитата(vvs157 @ Jan 13 2008, 00:36)  А производители измерительного оборудивания и не знают, что они обречены, ибо живут "во вчерашнем дне" обеспечивая ASCII интерфейс. В чём-то он прав. Это вчерашний день, а сегодня модно врукопашную на C структуру в сокет засовывать. Только кто сказал, что день вчерашний безусловно так уж и плох? Я ж сказал -- ум, опыт надо, и даже этого мало. У дня вчерашнего он есть, на собственных ошибках поо крайней мере.
--------------------
[ZX]
|
|
|
|
|
Jan 13 2008, 12:31
|

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

|
Цитата На телнет неделю? Об этом - чуть ниже, не Вы один тут удивляетесь  Цитата Предлагаете сниффер как универсальное средство отладки и мониторинга межприборного взаимодействия Как одно из необходимых средств - конечно. А также надо использовать хотя-бы отладчики для ускорения процесса. Цитата Или быстренько изучить работу с сокетами и под любую задачу лихо писать программку на С? Ага, вы предлагает вообще не изучать ничего и гнать данные в текстовом виде? Глубину этого заблуждения я сейчас постараюсь продемонстрировать. Вам и Kirill Frolov'у, который Цитата Я б вам не доверил. Не неделю. Пол-часа. Давайте посмотрим, как будет выглядеть вариант с передачей бинарных данных и с передачей в виде ascii-строк. Допустим, у нас есть набор переменных v1, v2 ... vn, которые надо передать в другой софт на другом компе через сеть используя TCP/IP Мой вариант (конечно, все условно) Код //Передача
stuct { long v1; float v2; .... short v3; }VARS;
...
if (send(sock,&VARS,sizeof(VARS),0)!=sizeof(VARS)) { //Ошибка .... }
//Прием
stuct { long v1; float v2; .... short v3; }VARS;
...
int res; if (ioctlsocket(sock,FIONREAD,&res)) //Вариант для винды { //Ошибка } if (res<sizeof(VARS)) { //Еще нет достаточного количества данных } if (recv(sock,&VARS,sizeof(VARS),0)!=sizeof(VARS)) { //Ошибка } Есть небольшая тонкость, связаная с выравниваем полей в структурах, это решается при помощи #pragma pack(1). Теперь посмотрим, что надо сделать для работы с ascii Код //Передача
char s[100]; int l; sprintf(s,"%d %d %d\r\n",v1,v2,...); l=strlen(s); if (send(sock,s,l,0)!=l { //Ошибка } А вот в приеме все не так банально. Надо делать весьма хитрую процедуру, которая будет выполнять построчное чтение в буфер строки из сокета (т.е. сначала она будет читать в какой-то фиксированый буфер, а затем перекладывать данные в буфер строки), обязательно следить, не выйдет ли строка за размеры буфера (любители не выполнять таких проверок как раз и занимаются регулярным отловом узких мест и выпуском патчей на свой софт), далее при помощи sscanf или другим способом мы вытаскиваем нужные нам переменные. Если мой вариант работоспособен сразу, то вариант со строками еще надо правильно написать и отладить. Не говоря уже о том, что легко допустить ошибку, приводящую к возможности переполнения буферов со всеми вытекающими последствиями. Теперь обратим внимание на то, что у автора в приборе стоит весьма маленький по ресурсам камень. Напомню, что formatted_write с поддержкой плавающей запятой - килобайт под 8, и еще ему нужен огромный размер стека. Если надо будет разбирать числа при приеме, то sscanf - тоже весьма немалая процедура. Вот отсюда, кстати, и растут ноги упомянутого мной членомерства. Так сколько времени человек будет делать это все? За неделю, я думаю, как раз справится. Так что, господа - любители телнета, тут вы погорячились. Пока что прозвучала только одна здравая идея (и я с ней мало того, что согласен, еще и стараюсь пользовать в меру возможностей) - это полностью избавиться от софта на верхнем уровне, переложив все на браузер. Но тут требуются намного большие ресурсы проца в приборе. Цитата Да Вы просто в душе хакер! А Вы завидуете черной завистью?
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|