![]() |
Модераторы: javastic, AntonSaburov |
![]() ![]() ![]() |
|
andrewjr20 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 11.2.2012 Репутация: нет Всего: нет |
Добрый день
Имеется сервер (асинхронные сокеты, C#, создан на основе этого примера), и клиенты на j2me (midp 2.0, cldc 1.0, на основе клиент-серверного примера NetworkingDemo). Чтобы отслеживать, живы ли клиенты, завёл список на сервере, и раз в 20 секунд заставил клиентов посылать некую строку, увеличивая время последней активности в списке, сам же сервер раз в 10 секунд проверяет список, не превысило ли время последней активности минуту - и если минуту клиент неактивен (батарея села, или ещё какая-проблема, при которой клиент отключен, но на сервере исключение не выскочило), клиент удаляется из списка и сокет принудительно закрывается. Но довольно часто бывает так, что клиент жив, сеть работает, но вышеозначенные пинги от него перестают идти - сервер его рубит, и на клиенте идёт обработка ошибки 10054 (что опять-таки подтверждает нормально функционирующую сеть). Перестают уходить пинги хоть сразу же после авторизации клиента, хоть через 5 минут, а могут только через полтора часа. До ввода этой системы пингов была немного другая система: сам сервер по своему списку сокетов просто отсылал некую строку, чтобы (в случае долгого периода неактивности на телефоне) поддерживать соединение и не быть отключенным оператором. Но даже тогда с той же непонятной периодичностью клиенты отваливались. Уже не знаю, что можно сделать, чтобы при наличии постоянного соединения с интернетом клиенты так же стабильно были подключены к серверу.. Заранее спасибо за помощь, если нужна какая-то дополнительная информация - обязательно напишу. |
|||
|
||||
oxigen |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 142 Регистрация: 12.4.2010 Репутация: 4 Всего: 4 |
Не совсем понятен один момент.
Но довольно часто бывает так, что клиент жив, сеть работает, но вышеозначенные пинги от него перестают идти А на клиенте что при этом происходит? Я так понял, что Вы по TCP общаетесь. Клиент отправил TCP пакет. Дальше он или получит ACK от сервера или выдаст IOException. Кстати что насчет wifi соединения или симулятора? То же самое происходит? |
|||
|
||||
andrewjr20 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 11.2.2012 Репутация: нет Всего: нет |
По тому непонятному моменту: на телефоне (по описаниям клиентов) в этот момент просто переставали обрабатываться объекты command, то есть пытается человек нажать кнопку и отправить данные, а телефон не реагирует в течение нескольких секунд, а потом ошибка 10054 и выключение.
Но на деле - вина оператора (beeline), который ровно через полтора часа активного подключения при небольшом трафике, меньшем 1-1,5 МБ (сам не замерял, прочёл в интернете) отключает соединение - на телефоне на пару секунд выскакивает сообщение "пакетное подключение закрыто сетью", и связь обрубается. Проверял подобный момент на агенте mail.ru - ситуация аналогичная, но агент после такого дисконнекта предлагает переподключиться, что я и добавил в свой мидлет, так что вопрос можно считать закрытым ![]() |
|||
|
||||
![]() ![]() ![]() |
FAQ раздела лежит здесь! |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java ME (J2ME) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |