.NET Socket编程报错解决

开发一个C/S项目,涉及到服务端停止之后,客户端定时重连的问题,在开发过程中遇到了一个报错如下:

断开套接字连接后,只能通过异步方式再次重新连接,而且只能连接到不同的 EndPoint。  在操作完成前,在将不会退出的线程上必须调用 BeginConnect。

从网上查找相关资料后并未解决,突发奇想,利用万能的List类型解决了该问题,方法如下:

先添加全局变量

Private _Socket As New List(Of Socket)

再在连接的过程中添加几条_Socket.Clear(): 

Private Sub ConnectServer()
        _Socket.Clear()
        Dim SockClient As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) 
        _Socket.Add(SockClient)
        Dim Address As IPAddress = IPAddress.Parse(_ServerIPString)
        Dim Endpoint As New IPEndPoint(Address, _ServerPort)
        Try '捕获异常
            _Socket(0).Connect(Endpoint) '发起连接,此处用List中的第一项索引来替代局部SockClient
        Catch ss As SocketException
            Dim strErrorMsg As String = ss.SocketErrorCode.ToString
            strErrorMsg = strErrorMsg.Replace("TimedOut", "连接超时!")
            strErrorMsg = strErrorMsg.Replace("ConnectionRefused", "连接被拒绝!")
            If SockClient.Connected Then SockClient.Close()
            _Socket.Clear()
            MessageBox.Show(strErrorMsg, "连接异常", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Return
        Catch s As Exception
            If SockClient.Connected Then SockClient.Close()
            _Socket.Clear()
            MessageBox.Show(s.Message, "异常", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Return
        End Try

End Sub

大功告成

测试结果:

反复断开服务端后,重新调用ConnectServer过程再次连接,均连接成功再无报错。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值