Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Winsock


Автор: neic 14.6.2010, 13:25
Вот мне интересно стало с Winsock.State.

Хочу сделать переподключение к серверу в случае обрыва связи.

У State есть 8 констат:
Код

sckClosed    Такое значение стоит при запуске программы или когда порт закрыт 
sckOpen    Порт открыт 
sckListening    Порт прослушивается 
sckConnectionPending    Ожидание связи 
sckConnecting    Подключение к хосту 
sckConnected    Связь установлена 
sckClosing    Связь закрывается... 
sckError    Ошибка


И вот я тут подумал, если связь с сервером пропадает из-за отключения от интернета Winsock поймет, что он отключен (а именно будет ли выдавать sckClosing или sckClosed, или sckError)?

Просто если он сможет все это (обрыв соединения, отключение сервера и т.д.) отслеживать, то вместо сложных конструкций, типа посылки команды серверу, потом проверка ответа сервера и т.д., можно было бы все это в одну строчку записать.

Автор: Akina 14.6.2010, 20:52
Цитата(neic @  14.6.2010,  14:25 Найти цитируемый пост)
если связь с сервером пропадает из-за отключения от интернета Winsock поймет, что он отключен (а именно будет ли выдавать sckClosing или sckClosed, или sckError)?

Нет, не поймёт. 

Автор: neic 16.6.2010, 20:23
Хм...а если сделать так:
Код

On Error Resume Next
' проверка есть ли соединение с интернетом, если интернета нет, то идем на "pere_podkl:" или вообще Exit Sub
' далее такая структура
If Winsock1.State <> sckClosing or Winsock1.State <> sckError or Winsock1.State <> sckClosed then
        On Error Goto pere_podkl
               Winsock1.Send "set_data"      
else
pere_podkl:
... ' переподключение
exit sub
end if
' если попадаем сюда, значит связь работает нормально


+ такой конструкции, то что:
1) не нужно ждать ответ от сервера
2) уменьшает код и на клиенте и на сервере
3) меньше путаницы с этим переподключением.

Автор: Akina 16.6.2010, 20:34
Да. Иного выхода не вижу.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)