![]() |
|
Модераторы: gambit |
![]()
|
|
| kokcu |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 23.3.2009 Репутация: нет Всего: нет |
Здравствуйте, появилась проблема.
Есть клиенты и сервер, сервер представляет собой слушалки на нескольких портах, клиенты соединяются через gprs\edge и шлют сообщения. Сейчас клиенты устроены так: если один из пакетов не смог послаться то запускаем в отдельном потоке реконект, и его нельзя повторять пока не закончиться этот. Все бы хорошо, клиенты подключаются и работают, но бывает что некоторые просто теряются и не пытаются переподключиться. Кто сталкивался с подобной проблемой? может есть готовые библиотеки? |
|||
|
||||
| Skynin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: нет Всего: 10 |
Написал свою на такое дело.
Вам надо разобраться почему "не пытаются переподключиться". State diagram of Transmission Control Protocol (TCP): ![]() Наверняка потому что сокет "залипает" в состоянии FIN_WAIT / LAST_ACK а запись в такой сокет - не выдает ошибки, но ничего реально послано не будет. То есть на "воздушных" соединениях, WiFi, GRPS, и т.д. нередка ситуация когда когда один из 2ух сокетов TCP отвалился, а один - долго живой. Казалось бы, быть такого не может, "чтобы у трубы была только одна дырка" - а вот в действительности - бывает. Боролся пингованием, перед посылкой реальных данных, с указанием частоты пинга (если последний раз посылали данные Х и больше секунд тому, пингануть, если меньше, будем надеяться что за время меньшее Х соединение осталось в рабочем состоянии и просто шлем данные) и максимального времени ответа - если не пришел ответ за время Y - значит точно у нас полу-соединение, а потому 1. закрываем сокет, 2. создаем новый, и 3. если успешно, то шлем данные. Это сообщение отредактировал(а) Skynin - 3.7.2010, 12:22 |
|||
|
||||
| kokcu |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 23.3.2009 Репутация: нет Всего: нет |
Спасибо. Значит буду с пингом пробовать.
А правильно делаю что на каждого клиента по тцп слушалке? Есть ли смысл переделывать на 1 удп сервер? |
|||
|
||||
| kokcu |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 23.3.2009 Репутация: нет Всего: нет |
А можно ли слать с тцп клиента на удп сервер? Возможности проверить щас нет.
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Распределённые приложения и сеть | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |