您的位置:首页 > 理论基础 > 计算机网络

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

2015-02-28 14:01 706 查看
源码下载在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐