winsock не реагирует на обрыв связи

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
dklmn
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 23.03.2004 (Вт) 12:21

winsock не реагирует на обрыв связи

Сообщение dklmn » 23.05.2005 (Пн) 11:25

Такая проблемка
- есть сервер с массивом винсоков.
- все работает вроде как надо
- но по идее ведь винсок контрол должен генерить ошибку при обрыве связи.
Вот я написал некий обработчки ошибок:
'*********************
Код: Выделить всё

Private Sub tcpserver_Error(Index As Integer, ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
    Log_Event "Server error " & Description
    If Number = 10053 Then
         tcPServer(Index).Tag = ""
        tcPServer(Index).Close
        Log_Event "Обрыв связи , сокет закрыт.."
       
    End If
End Sub[syntax="vb"]

'***************
теперь коннекчусь клиентом начинаю что то передавать и на самом интересном месте убиваю клиента.
Ошибка НЕ генериться.
Сокет так и висит открытым.
Что не так делаю?[/syntax]

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 23.05.2005 (Пн) 12:29

Событие error не возникает, если связь прерывается. Не знаю, может быть, есть более изящный способ, но я у себя в программе делал таймер и по нему проверял Winsock.State.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.05.2005 (Пн) 12:38

А событие Close происходит?
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.05.2005 (Пн) 13:40

Обрывы бывают разные. В одних случаях происходит Error, в других Close.
Lasciate ogni speranza, voi ch'entrate.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 23.05.2005 (Пн) 14:05

О, точно! Проглядел я это событие! Winsock.Close.

dklmn
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 23.03.2004 (Вт) 12:21

Сообщение dklmn » 23.05.2005 (Пн) 14:46

alibek писал(а):А событие Close происходит?

Хм...
и правда происходит.
Хорошо когда уже обо всем позаботились.
Но плохо когда об этм не знаешь.
Спасибо.

Alexander N. Samarin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 397
Зарегистрирован: 05.03.2005 (Сб) 20:59
Откуда: Интернат 18 (СУНЦ МГУ), комната 214А, кровать посередине

Сообщение Alexander N. Samarin » 23.05.2005 (Пн) 19:16

Я сделал так:

Сервер::
Код: Выделить всё

Private Sub tcpServer_ConnectionRequest(ByVal requestID As Long)
    If tcpServer.State <> sckClosed Then tcpServer.Close
   
    tcpServer.Accept requestID
   
    tcpServer.SendData "Connect"
End Sub

Private Sub tcpServer_DataArrival(ByVal bytesTotal As Long)
    Dim InputData As String
   
    tcpServer.GetData InputData
   
    If InputData = "ClientON" Then
        Answer = True
        ...
    ElseIf InputData = "ClientOFF" Then
        Answer = False

        MsgBox "Client diconnected", vbInformation + vbOKOnly, App.Title
        End
    Else
        ...
    End If
End Sub




Клиент::
Код: Выделить всё

Private Sub tcpClient_DataArrival(ByVal bytesTotal As Long)
    Dim InputData As String
   
    tcpClient.GetData InputData
   
    If InputData = "Connect" Then
        Connected = True       
        tcpClient.SendData "ClientON"
    ElseIf InputData = "Diconnect" Then
        Connected = False
       
        tcpClient.Close
       
        MsgBox "Server diconnected", vbInformation + vbOKOnly, App.Title
        End
    Else
        ...
    End If
End Sub



Это реагирует на нормальное отключение клиента, также можно сделать проверку, есть ли связь.
На это не смотрите! Это не подпись!!!!!!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 165

    TopList