在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
客户端代码:
客户端代码
服务器端无需额外的设置。
至此,我们的工作已经完成。
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!