博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Socket通信服务的心跳包(转)
阅读量:6767 次
发布时间:2019-06-26

本文共 2758 字,大约阅读时间需要 9 分钟。

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

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

# 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/xugang/archive/2008/04/15/1154689.html,如需转载请自行联系原作者
你可能感兴趣的文章
WP8_ListBox的用法
查看>>
【BZOJ】1664: [Usaco2006 Open]County Fair Events 参加节日庆祝(线段树+dp)
查看>>
Hadoop的调度器总结
查看>>
Web前端开发资源集锦
查看>>
[转]php的public、protected、private三种访问控制模式的区别
查看>>
iOS开发之手势识别
查看>>
说说Spring中的WebDataBinder
查看>>
每日一句(2014-9-29)
查看>>
标头“Vary:Accept-Encoding”指定方法及其重要性分析
查看>>
史上最简单的Hibernate入门简单介绍
查看>>
C语言
查看>>
在Xcode中使用Git进行源码版本控制
查看>>
ASP.NET将word文档转换成pdf的代码
查看>>
(原创)大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 神经网络分析算法原理篇)...
查看>>
head命令
查看>>
java基础复习二——面向对象一
查看>>
shell语法简单介绍
查看>>
护眼色的RGB值
查看>>
无法识别的属性“targetFramework”。请注意属性名称区分大写和小写。错误解决的方法...
查看>>
EJB究竟是什么,真的那么神奇吗??
查看>>