socket编程 编程里面的心跳包是怎么回事?

除了心跳包,还有什么办法判断socket意外断开?
[问题点数:40分,结帖人ayun00]
除了心跳包,还有什么办法判断socket意外断开?
[问题点数:40分,结帖人ayun00]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2010年 总版技术专家分年内排行榜第一2009年 总版技术专家分年内排行榜第一
2011年 总版技术专家分年内排行榜第二
本帖子已过去太久远了,不再提供回复功能。& & 在我们的考试系统中用到客户端和服务器之间的通信,服务器要时刻知道客户端的网络连接状态,当时我遇到这个问题的时候就没有在网上找到传说中的&心跳包&。只是凭自己心思随想写出了一个解决时下问题的算法。下面是客户端心跳包核心代码:& & #region ++++++++++++++++++++客户端的感觉系统& & //启动记时器& & public void BeginTheTimer()& & {& & //th_UserLogin();& & object myobject = (object)7;&&&//这里只是要一个object类型数据,用它做为下面Timer的参数之一,其它没有什么意思& & //暂时设定为1秒钟启动一次!& & System.Threading.Timer t = new System.Threading.Timer(new System.Threading.TimerCallback(testTheNet), myobject, );& & }& & //启动监视"已登录用户通信情况"的线程& & public void testTheNet(object myobject)& & {& & //UserPassport up=new UserPassport();& & Thread sendMyPulseThPro = new Thread(new ThreadStart(delegateSendMyPulse));& & sendMyPulseThPro.Start();& & }& & /// & & /// 每隔1秒就是要来做这些事情的& & /// & & public void delegateSendMyPulse()& & {& & loginServer lser = new loginServer();& & Login l = new Login();& & l.Id = lser.MyLogin.Id;& & l.ClientTypeVersion =& & l.RequestType = 3;&&&&&&&&&//3是确认联接正常的一个信号(让服务知道它与服务器的联接是正常的)& & loginServer lserver = new loginServer();& & Thread thSendDat2 = new Thread(new ParameterizedThreadStart(lserver.delgSendDataMethod));//启动一个新线程去发送数据& & thSendDat2.Start(l);& & thSendDat2.IsBackground =& & longinserver.MyLostTime += 1;&&//标记我已经发送出去一次数据了& & if(longinserver.MyLostTime>=3)&&&//如果外发了3次请求暗号后仍不见服务器的回应,则认为客户端已经与服务器断开联系了& & {& & //停止Timer& & //告诉用户:&你已经与服务器失去联系了&&&&&& & longinserver.Controls["txtShowMsg"].Text = "You have lost the connect!";& & }& & }& & #endregion +++++++++++++++++++++客户端的感觉系统& & 服务器端代码如下:& & #region +++++++++++++++++++++++服务器的感觉系统& & //启动记时器& & public void LoadTheTimer()& & {& & object o=(object)loginedCount++;& & UserPassport up = new UserPassport();& & //暂时设定为1秒钟启动一次!& & System.Threading.Timer t = new System.Threading.Timer(new System.Threading.TimerCallback(watchTheLoginUser), o, );& & }& & //启动监视"已登录用户通信情况"的线程& & public void watchTheLoginUser(object o)& & {& & //UserPassport up=new UserPassport();& & Thread checktheloginuser = new Thread(new ThreadStart(iAmAWatcher));& & checktheloginuser.Start();& & }& & //真正做事的工人:这个工人的使命是每隔1秒钟后就查看一下登记薄registry里面有谁没有定时来向服务器报到了,如果出现谁三次检查都没有签到则除之名& & public void iAmAWatcher()& & {& & this.txtLogin.Text += "@+";& & int index = 0;& & for (index = 0; index < loginedC index++)& & {& & if (myRegistry[index].alive==false&&registry[index].studentID!="")& & {& & lock(this)& & {& & myRegistry[index].no_check_in_count += 1;&&&&&&&&&&//坏(未到)记录增加一次& & if (myRegistry[index].no_check_in_count >= 3)& & {& & //this.lblShowMsg.Text = "the student" + registry[index].studentID.ToString() + "is diaoxianle!";& & this.txtLogin.Text += "88";& & //标记该人已经与服务器失去连接了,因为他有连续3次的未到记录存在& & registry[index].studentID = "";& & registry[index].StudentName = "";& & registry[index].StudentIP = "";& & registry[index].status = 2;&&&&&//掉线& & }& & }& & }& & }& & }//定时检查在线人目前状态& & #endregion +++++++++++++++++++服务器的感觉系统& & 来自:/hexiaosheng/archive//xintiaobao.html
声明:该文章系网友上传分享,此内容仅代表网友个人经验或观点,不代表本网站立场和观点;若未进行原创声明,则表明该文章系转载自互联网;若该文章内容涉嫌侵权,请及时向
上一篇:下一篇:
相关经验教程
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.003 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.003 收益TCP协议的KeepAlive机制与HeartBeat心跳包 -- 简明现代魔法

我要回帖

更多关于 socket编程 的文章

 

随机推荐