我是靠谱客的博主 羞涩中心,最近开发中收集的这篇文章主要介绍关于Socket通信服务的心跳包(转),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在一些系统中,经常用到客户端和服务器之间的通信,服务器要时刻知道客户端的网络连接状态,这大概就是所谓的“心跳包”。

下面是客户端心跳包核心代码:

# region  ++++++++++++++++++++  客户端的感觉系统
        
// 启动记时器
         public   void  BeginTheTimer()
        {
            
// th_UserLogin();

            
// 这里只是要一个object类型数据,用它做为下面Timer的参数之一,没有其它意思
             object  myobject  =  ( object ) 7 ;

            
// 暂时设定为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 ;

            
// 如果外发了3次请求暗号后仍不见服务器的回应,则认为客户端已经与服务器断开联系了
             if (longinserver.MyLostTime >= 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" 
                            
// this.lblShowMsg.Text += registry[index].studentID.ToString() 
                            
// this.lblShowMsg.Text += "is diaoxianle!";

                            
this .txtLogin.Text  +=   " 88 " ;
                            
// 标记该人已经与服务器失去连接了,因为他有连续3次的未到记录存在
                            registry[index].studentID  =   "" ;
                            registry[index].StudentName 
=   "" ;
                            registry[index].StudentIP 
=   "" ;
                            registry[index].status 
=   2 ;       // 掉线
                            
                        }
                    }
                }
            }
        }  
// 定时检查在线人目前状态
# endregion  +++++++++++++++++++  服务器的感觉系统


来源: http://www.cnblogs.com/hexiaosheng/archive/2008/04/14/xintiaobao.html

最后

以上就是羞涩中心为你收集整理的关于Socket通信服务的心跳包(转)的全部内容,希望文章能够帮你解决关于Socket通信服务的心跳包(转)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(71)

评论列表共有 0 条评论

立即
投稿
返回
顶部