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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Как определить разрыв UDP сокета на Telit GC864Q?
meister
сообщение Aug 18 2009, 11:13
Сообщение #1


Местный
***

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



После установки UDP соединения
Код
AT#SKTD=1,3333,"сервер",255,46875

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

Спасибо.
Go to the top of the page
 
+Quote Post
av-master
сообщение Aug 18 2009, 11:54
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 857
Регистрация: 14-05-05
Из: Украина
Пользователь №: 4 998



послать ченить и не получить ответа...
Go to the top of the page
 
+Quote Post
meister
сообщение Aug 18 2009, 11:56
Сообщение #3


Местный
***

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



Цитата(av-master @ Aug 18 2009, 15:54) *
послать ченить и не получить ответа...


Это не вариант, нужно уметь посылать "в пустоту", в том смысле, что если "сервер" не отвечает - это совсем не значит, что надо заново открывать сокет или перезапустить GPRS.
Go to the top of the page
 
+Quote Post
av-master
сообщение Aug 18 2009, 12:08
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 857
Регистрация: 14-05-05
Из: Украина
Пользователь №: 4 998



как ты себе это представляеш?

а ну с терминалки какойнить пример приведи?
Go to the top of the page
 
+Quote Post
meister
сообщение Aug 18 2009, 12:36
Сообщение #5


Местный
***

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



Цитата(av-master @ Aug 18 2009, 16:08) *
как ты себе это представляеш?


UDP пакет можно послать на несуществующий адрес. Это не TCP. Если такого адреса сейчас нет это не означает, что нужно перезапускать сокет модема или GPRS.

Цитата(av-master @ Aug 18 2009, 16:08) *
а ну с терминалки какойнить пример приведи?


В смысле?
Go to the top of the page
 
+Quote Post
=F8=
сообщение Aug 18 2009, 12:57
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954



Цитата(meister @ Aug 18 2009, 14:13) *
После установки UDP соединения
Код
AT#SKTD=1,3333,"сервер",255,46875

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

Спасибо.


Никак, на то оно и UDP. Либо положить поверх UDP свой протокол.
Go to the top of the page
 
+Quote Post
meister
сообщение Aug 18 2009, 13:52
Сообщение #7


Местный
***

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



Цитата(=F8= @ Aug 18 2009, 16:57) *
Никак, на то оно и UDP. Либо положить поверх UDP свой протокол.


А если я его открою в режиме TCP, как определить? Может, я как-то непонятно объснил. Есть устройство, оно периодически что-то шлет на сервер. БС может перезагрузиться, связь может ухудшиться так, что сокет нужно будет открыть заново. Это никак нельзя поймать?

Сообщение отредактировал meister - Aug 18 2009, 14:06
Go to the top of the page
 
+Quote Post
=F8=
сообщение Aug 18 2009, 15:00
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954



Цитата(meister @ Aug 18 2009, 16:52) *
А если я его открою в режиме TCP, как определить? Может, я как-то непонятно объснил. Есть устройство, оно периодически что-то шлет на сервер. БС может перезагрузиться, связь может ухудшиться так, что сокет нужно будет открыть заново. Это никак нельзя поймать?


Если в режиме TCP то, когда будет превышен лимит повторов, разорвется связь - DCD уйдет вверх, и получите NO CARRIER. Только сколько придется ждать известно только Телиту. Проще переодически пересоединятся, TCP соединение в отличии от UDP при отсутствии сервера не установится.
Go to the top of the page
 
+Quote Post
alx125
сообщение Aug 18 2009, 23:01
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 202
Регистрация: 18-05-09
Из: Novosibirsk
Пользователь №: 49 204



Цитата(meister @ Aug 18 2009, 15:13) *
После установки UDP соединения
Код
AT#SKTD=1,3333,"сервер",255,46875

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

Спасибо.

Дело в том, что особенность UDP как раз в том и есть, что сетевое соединение не устанавливается. Т.е вы "пуляете" по адресу и все! В этом его фундаментальное отличие от TCP. Если же нужно контролировать сам факт доставки (что в принципе эквивалентно контролю соединения), то это надо делать вашим ПО (как бы реализация нового уровня стека протоколов над UDP/IP).

Сообщение отредактировал alx125 - Aug 18 2009, 23:03
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Aug 19 2009, 05:16
Сообщение #10


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Как вариант периодически опрашивать DNS сервер, который был получен от при установлении соединения от оператора.

Цитата(meister @ Aug 18 2009, 14:13) *
После установки UDP соединения
Код
AT#SKTD=1,3333,"сервер",255,46875

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

Спасибо.
Go to the top of the page
 
+Quote Post
meister
сообщение Aug 19 2009, 06:22
Сообщение #11


Местный
***

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



Цитата(alx125 @ Aug 19 2009, 03:01) *
Дело в том, что особенность UDP как раз в том и есть, что сетевое соединение не устанавливается.


Я уж не знаю насколько аналогия близкая: шлем ethernet пакеты (да, прямо их), для их посылки нужно просто записать MAC-адрес получателя, есть получатель или нету - без разницы (может, он включится завтра). Мне надо поймать факт того, что выдернули кабель из розетки. Вы предлагаете делать это протоколом? В случае ethernet я могу у PHY спросить, чего там с кабелем-скоростью-дуплексом. Мне надо тоже самое для GPRS.

Цитата(AlexandrY @ Aug 19 2009, 09:16) *
периодически опрашивать DNS сервер


Мне вот это очень не нравится. Мне надо будет "периодически" закрывать соединение и получать адрес google.com (или любой другой). Если google.com недоступен (по разным причинам) делать вывод, что во всем виновато GPRS соединение и его надо перезапустить.
Go to the top of the page
 
+Quote Post
=F8=
сообщение Aug 19 2009, 06:55
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954



Цитата(meister @ Aug 19 2009, 09:22) *
Мне вот это очень не нравится. Мне надо будет "периодически" закрывать соединение и получать адрес google.com (или любой другой). Если google.com недоступен (по разным причинам) делать вывод, что во всем виновато GPRS соединение и его надо перезапустить.

Закрывать соединение как раз не надо. GC864 до 6 соединений. Посылаете +++ переходите в командный режим делаете что нужно и снова возвращаетесь с своему соединению.
Go to the top of the page
 
+Quote Post
av-master
сообщение Aug 19 2009, 11:15
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 857
Регистрация: 14-05-05
Из: Украина
Пользователь №: 4 998



А мое имхо такое.
UDP годится для чатов и не более.. а в M2M и Embedded нужно более надежные каналы использовать... минимум TCP + свой контроль...

Ну потоковое ченить тоже гнать по UDP можно.. но по ТСП рулить в соседнем порту...

А физический уровень внутреннего стека ИМХО недоступен.
поднимайте внешний стек.. хотя, что это даст. Вопрос..
UDP сокет контролировать невозможно... жпрс можно.. а сокет - нет.
ИМХО
Go to the top of the page
 
+Quote Post
=F8=
сообщение Aug 19 2009, 12:05
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954



Цитата(av-master @ Aug 19 2009, 14:15) *
А мое имхо такое.
UDP годится для чатов и не более.. а в M2M и Embedded нужно более надежные каналы использовать... минимум TCP + свой контроль...

Если свой протокол поверх ложить то лучше как-раз UDP. Во-первых меньше лишних байтов по сети гоняется, во-вторых проще контролировать состояние соединения. ИМХО.

Сообщение отредактировал =F8= - Aug 19 2009, 12:08
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Aug 19 2009, 16:50
Сообщение #15


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Чет вы не въехали. При чем тут google.com?
Вы должны слать запрос на DNS сервак который вам сообщает APN вашего провайдера.
Если уж этот сервак не работает то у вас вообще ничего не работает. Сессию точно надо рвать.
Тестить DNS можете любой служебной командой, например A для all
Протокол общения с DNS идет как раз по UDP, значит и работу своего сокета узнаете.


Цитата(meister @ Aug 19 2009, 09:22) *
Мне вот это очень не нравится. Мне надо будет "периодически" закрывать соединение и получать адрес google.com (или любой другой). Если google.com недоступен (по разным причинам) делать вывод, что во всем виновато GPRS соединение и его надо перезапустить.



Ну эт вы от незнания наверно.
Во первых провайдерские NAT-ы пробиваются теми же STUN-ами только по UDP, а по TCP пробить NAT можно только тунелированием.
Но TCP тунелирование тоже не все NAT-ы пропускают.
С другой стороны ошибочно думать, что TCP самый лучший из протоколов для надежной доставки.
Есть куча протоколов с надежной доставкой работающих поверх UDP. Тот же L2TP

Цитата(av-master @ Aug 19 2009, 14:15) *
А мое имхо такое.
UDP годится для чатов и не более.. а в M2M и Embedded нужно более надежные каналы использовать... минимум TCP + свой контроль...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 21:35
Рейтинг@Mail.ru


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