栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

.NET Socket编程报错解决

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

.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过程再次连接,均连接成功再无报错。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/904877.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号