码迷,mamicode.com
首页 > Windows程序 > 详细

【c#源码】基于TCP通信的客户端断线重连

时间:2015-02-28 18:58:45      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:tcp网络通信

源码下载

在CS程序中,断线重连应该是一个常见的功能。

此处的断线重连主要指的是服务器端因为某种故障,服务器端程序或者系统进行了重新启动,客户端能够自动探测到服务器端掉线,并尝试重新进行连接

本程序基于来自英国的开源c#通信框架的networkcomms(2.3.1版本)

先看一下效果

初始状态:

技术分享

当服务器端程序关闭后,客户端会自动探测到,并在客户端显示相关信息

技术分享

然后,我们设定为每隔5秒重连一次,可以自定义设置重连的次数,比如说重连50次,如果还没有重连成功,则放弃重连

技术分享

然后我们重新启动服务器端,客户端会显示重连成功.

技术分享

具体步骤如下:

需要修改几处NetworkComms2.3.1通信框架中的代码

第一步:修改ConnectionInfo类的NoteConnectionShutdown方法

该方法原来是:

技术分享 View Code

修改后为: 

技术分享

   private bool reconnectFlag = false;        /// <summary>
        /// 是否为重连接模式        /// </summary>
        public bool ReconnectFlag
        {            get { return reconnectFlag; }            set { reconnectFlag = value; }
        }        /// <summary>
        /// Note this connection as shutdown        /// </summary>
        internal void NoteConnectionShutdown()
        {            lock (internalLocker)
                ConnectionState = ConnectionState.Shutdown;            //添加以下代码  初始状态为False  触发连接状态改变事件
            if (reconnectFlag == false)
            {
                StateChanged.Raise(this, new StringEventArgs("连接出现异常"));
            }

        }        //添加状态改变事件 

        public event EventHandler<StringEventArgs> StateChanged;

技术分享

 

第二步:在NetworkComms库类中添加相关的代码如下:

技术分享 相关代码

第三步:在NetworkComms静态类中添加如下方法:

技术分享

 public static void ClearDic()
        {            lock (globalDictAndDelegateLocker)
            {
                allConnectionsById.Clear();

                allConnectionsByEndPoint.Clear();

                oldNetworkIdentifierToConnectionInfo.Clear();
            }
        }

技术分享

如果您使用的是V3版本,代码稍微变化:

技术分享 V3

客户端代码:

技术分享 客户端代码

服务器端无需额外的设置。

至此,我们的工作已经完成。

祝大家工作顺利 

www.networkcomms.cn

【c#源码】基于TCP通信的客户端断线重连

标签:tcp网络通信

原文地址:http://3008576.blog.51cto.com/2998576/1615925

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!