Socket - Desconectando correctamente !!

Iniciado por TrashAmbishion, 23 Septiembre 2016, 20:17 PM

0 Miembros y 1 Visitante están viendo este tema.

TrashAmbishion

Código (vbnet) [Seleccionar]
Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    End Sub

    Dim clientSocket As Socket
    Dim byteData(1023) As Byte

    Private Sub OnConnect(ByVal ar As IAsyncResult)
        clientSocket.EndConnect(ar)
        clientSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, New AsyncCallback(AddressOf OnRecieve), clientSocket)
    End Sub

    Private Sub OnDisconnect(ByVal ar As IAsyncResult)
        Dim client As Socket = ar.AsyncState
        client.EndDisconnect(ar)

        clientSocket.Close()
        clientSocket = Nothing
    End Sub

    Private Sub OnRecieve(ByVal ar As IAsyncResult)

        Dim client As Socket = ar.AsyncState
        client.EndReceive(ar)
        Dim bytesRec As Byte() = byteData
        Dim message As String = System.Text.Encoding.ASCII.GetString(bytesRec)
        Read(message)
        clientSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, New AsyncCallback(AddressOf OnRecieve), clientSocket)

    End Sub

    Delegate Sub _Read(ByVal msg As String)
    Private Sub Read(ByVal msg As String)
        If InvokeRequired Then
            Invoke(New _Read(AddressOf Read), msg)
            Exit Sub
        End If
        RichTextBox1.Text &= msg
    End Sub


    Private Sub btnConnect_Click(sender As Object, e As EventArgs) Handles btnConnect.Click
        clientSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
        Dim ipAddress As IPAddress = IPAddress.Parse("127.0.0.1")
        Dim ipEndPoint As IPEndPoint = New IPEndPoint(ipAddress, 8800)
        clientSocket.BeginConnect(ipEndPoint, New AsyncCallback(AddressOf OnConnect), Nothing)
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        clientSocket.BeginDisconnect(False, New AsyncCallback(AddressOf OnDisconnect), clientSocket)
    End Sub
End Class


Cada vez que doy en el Boton desconectar me salta una exepcion en OnReceive de que el objeto esta Dispose, alguien me puede explicar porque es que se dispara ese evento.

Lo otro es que en el lado del servidor no se entera de que el socket fue cerrado, para que el se percatara de esto tendria que hacer una especie de thread cada cierto tiempo verificando si el socket esta vivo ??

Como explican aqui

http://stackoverflow.com/questions/722240/instantly-detect-client-disconnection-from-server-socket

Salu2

Lo que busco es detectar cuando un cliente se conecta y desconecta tanto para el cliente como el servidor.