|
Как определить разрыв UDP сокета на Telit GC864Q? |
|
|
|
Aug 18 2009, 11:13
|

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

|
После установки UDP соединения Код AT#SKTD=1,3333,"сервер",255,46875 открывается сокет и я обмениваюсь данными. Как определить состояние, когда нужно будет установить соединение заново или даже перезапустить GPRS сессию? Спасибо.
|
|
|
|
|
Aug 18 2009, 12:36
|

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

|
Цитата(av-master @ Aug 18 2009, 16:08)  как ты себе это представляеш? UDP пакет можно послать на несуществующий адрес. Это не TCP. Если такого адреса сейчас нет это не означает, что нужно перезапускать сокет модема или GPRS. Цитата(av-master @ Aug 18 2009, 16:08)  а ну с терминалки какойнить пример приведи? В смысле?
|
|
|
|
|
Aug 18 2009, 12:57
|
Знающий
   
Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954

|
Цитата(meister @ Aug 18 2009, 14:13)  После установки UDP соединения Код AT#SKTD=1,3333,"сервер",255,46875 открывается сокет и я обмениваюсь данными. Как определить состояние, когда нужно будет установить соединение заново или даже перезапустить GPRS сессию? Спасибо. Никак, на то оно и UDP. Либо положить поверх UDP свой протокол.
|
|
|
|
|
Aug 18 2009, 15:00
|
Знающий
   
Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954

|
Цитата(meister @ Aug 18 2009, 16:52)  А если я его открою в режиме TCP, как определить? Может, я как-то непонятно объснил. Есть устройство, оно периодически что-то шлет на сервер. БС может перезагрузиться, связь может ухудшиться так, что сокет нужно будет открыть заново. Это никак нельзя поймать? Если в режиме TCP то, когда будет превышен лимит повторов, разорвется связь - DCD уйдет вверх, и получите NO CARRIER. Только сколько придется ждать известно только Телиту. Проще переодически пересоединятся, TCP соединение в отличии от UDP при отсутствии сервера не установится.
|
|
|
|
|
Aug 18 2009, 23:01
|
Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
|
Aug 19 2009, 05:16
|

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

|
Как вариант периодически опрашивать DNS сервер, который был получен от при установлении соединения от оператора. Цитата(meister @ Aug 18 2009, 14:13)  После установки UDP соединения Код AT#SKTD=1,3333,"сервер",255,46875 открывается сокет и я обмениваюсь данными. Как определить состояние, когда нужно будет установить соединение заново или даже перезапустить GPRS сессию? Спасибо.
|
|
|
|
|
Aug 19 2009, 06:22
|

Местный
  
Группа: Участник
Сообщений: 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 соединение и его надо перезапустить.
|
|
|
|
|
Aug 19 2009, 16:50
|

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 + свой контроль...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|