Re: Возможно ли что GPRS не гарантирует доставку?
От: Repich Украина  
Дата: 19.10.06 09:54
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Пишу клиент-сервер, столкнулся с проблемой на gprs. В некоторый момент времени пакеты перестают приходить на сервер. По таймауту сервер даже закрывает соединение через 15 минут, а через gprs команды все посылаются и посылаются как будто ничего не произошло. Использую TCP.


Я сталкивался с подобной проблемой. Для ее решения использовал "искусственное" подтверждение с сервера после приема определенного куска данных (т.к. контроль подтвержтения используемый TCP стеке модема недоступен для пользователя).
Можно использовать UDP и реализовать собственный протокол с подтверждением и таймаутами и на этом сэкономить трафик (к тому же заголовок UDP пакета меньше), но при этом возникают трудности с идентификацией уникальных логических соединений клиент-сервер (если интересно — могу поделится опытом использования UDP).

У меня была еще одна проблема при использовании GPRS в целом:
После того, как модем установит GPRS сессию (получит IP и т.д.), он передает данные на сервер и держит сессию открытой (опять же экономия — многие провайдеры округляют GPRS трафик в большую сторону при закрытии сессии — а нам этого не нужно ). Сессия может быть открыта долгое время (десятки часов), главное чтобы была какая-либо активность в пределах установленного провайдером таймаута (обычно 10-15 минут). Так вот, иногда происходит следующее: GPRS сессия продолжает быть активной (разрыва не происходит), а подключиться к серверу невозможно — ошибка подключения — сервер не отвечает (так как будто на удаленном сервере сервис не запущен). Короче все запросы уходят в никуда! И это продолжается до бесконечности, т.е. сеть перестает отвечать (хотя другие модемы в этой же соте продолжают исправно работать). Исправить это можно разрывом GPRS сессии и повторным подключением. А как узнать что перестала отвечать сеть или просто сервер не запущен? Приходится в случае, если к серверу подключиться неудается, посылать ICMP пакеты на какие-нибудь постоянно работающие сервера (например DNS серверы первого уровня), чтобы контролировать что модем еще "в сети".
Может это связано с оборудованием? Я использовал gsm-модемы Wavecom.
Может это особенноти работы GPRS? Я использовал не одного оператора — везде наблюдалась эта проблема.
Может есть предложения как контролировать "в сети ли я"?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.