socket通信服务心跳包(摘) - 茶茶猫的日志- 网易博客

socket通信服务 心跳包 (摘)

2010-03-25 15:41:42 阅读18 评论3 字号:

转自

客户端和服务器之间的通信,服务器要时刻知道客户端的网络连接状态..


  #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, 1000, 1000);
        }

        //启动监视"已登录用户通信情况"的线程
        public void testTheNet(object myobject) 
        {
            //UserPassport up=new UserPassport();
            Thread sendMyPulseThPro = new Thread(new ThreadStart(delegateSendMyPulse));
            sendMyPulseThPro.Start();
        } 
       
        /// <summary>
        /// 每隔1秒就是要来做这些事情的
        /// </summary>
        public void delegateSendMyPulse()
        {
            loginServer lser = new loginServer();
            Login l = new Login();
            l.Id = lser.MyLogin.Id;
            l.ClientTypeVersion = version;
            l.RequestType = 3;          //3是确认联接正常的一个信号(让服务知道它与服务器的联接是正常的)
            loginServer lserver = new loginServer();           
            Thread thSendDat2 = new Thread(new ParameterizedThreadStart(lserver.delgSendDataMethod));//启动一个新线程去发送数据
            thSendDat2.Start(l);
            thSendDat2.IsBackground = true;
            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, 1000, 1000);           
                   }

        //启动监视"已登录用户通信情况"的线程
        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 < loginedCount; 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 +++++++++++++++++++服务器的感觉系统

 

转自

<#--{zx1}日志--> <#--推荐日志--> <#--引用记录--> <#--相关日志--> <#--推荐日志--> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构-->
郑重声明:资讯 【socket通信服务心跳包(摘) - 茶茶猫的日志- 网易博客】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——