关于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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值