СообЧа > База Знаний > Программирование > Visual Basic

Вопрос

Происходит обрыв связи между сервером и клиентом. Как со стороны сервера попытаться восстановить соединение, кроме как встраивать в клиент функции сервера?

Ответ

Со стороны сервера, никак. Сервер же слушает порт и ожидает соединения с клиентом. Максимум что можно сделать — это убить запущенный сеанс связи и ждать повторного соединения клиента. Я одно время долго ломал голову над такой проблемой. Поступил просто.

Так как у меня сервер активный (сервер только посылает клиентам данные, а клиент только их отображает), то в случае обрыва связи (кабель выдернули, клиента ресетнули) при отправке данных срабатывает протокольный тайм-аут и Winsock меняет State. Соответственно возникает ран-тайм ошибка, которую я перехватываю и убиваю соответствующий сеанс связи.

На сервере все просто и само собой разумеется. А чтобы клиент тоже мог на такое реагировать — пришлось добавить в него таймер и раз в минуту делать посылку одного байта по установленному соединению. Ну и в обработчике ошибки — пересоединение.

С другой стороны можно использовать не TCP протокол, а UDP. Это широковещательный протокол и не требует установления соединения с сервером. Соответственно и не надо отлавливать такие критичные моменты.

AlexV



Copyright © 2000-2004 Сообщество Чайников
Контактная информация