在与Tcp套接字失去连接后重新连接到服务器

时间:2015-03-02 08:19:56

标签: vb.net sockets tcpclient

我试图在丢失连接时使用dont linger重新连接到服务器

Public Class Agent
    Dim bytes(1024) As Byte
    Dim remoteEP As New IPEndPoint(IPAddress.Parse(My.Settings("HostIP").ToString), CType(My.Settings("HostPort"), Integer))
    Dim permis As New SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "", SocketPermission.AllPorts)
    Dim S As New Net.Sockets.Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

如果连接成功,则会转到getdatadb,如果没有先转到socketclose,然后再次尝试连接

   Sub Connect()
        Try
            S.Connect(remoteEP)
        Catch ex As Exception
            socketclose()
            S.Connect(remoteEP)
        End Try
        GetDataDb()
    End Sub

用这个来关闭套接字

   Sub socketclose()
        Dim myOpts As New LingerOption(True, 1)
        S.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Linger, myOpts)
        S.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.DontLinger, False)
        S.Shutdown(SocketShutdown.Both)
        S.Close()


    End Sub

但它仍然显示异常

  

断开插座后,您只能重新连接   异步,并且只对不同的EndPoint。 BeginConnect必须   在一个线程上被调用,该线程在操作完成之前不会退出   完成。

我不知道为什么dontlinger不起作用。

0 个答案:

没有答案