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

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

# 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 +++++++++++++++++++ 服务器的感觉系统

关于Socket通信服务的心跳包(转) -感觉系统相关推荐

  1. 关于Socket通信服务的心跳包(转)

    代码 在一些系统中,经常用到客户端和服务器之间的通信,服务器要时刻知道客户端的网络连接状态,这大概就是所谓的"心跳包". 下面是客户端心跳包核心代码: # region +++++ ...

  2. 心跳包机制及Socket通信服务的心跳包

    本文转自http://www.cppblog.com/tx7do/archive/2009/11/09/100513.html  http://xue08161981.blog.163.com/blo ...

  3. Android Socket连接(模拟心跳包,断线重连,发送数据等)

    首页 博客 学院 下载 GitChat TinyMind 论坛 问答 商城 VIP 活动 招聘 ITeye CSTO 写博客 发Chat 喻志强的博客 耐心 细心 用心 传播正能量 RSS订阅 原 A ...

  4. java socket分包粘包 代码_分享java中处理socket通信过程中粘包情况的实例代码

    本篇文章主要介绍了java中处理socket通信过程中粘包的情况,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 这两天学习了java中处理socket通信过程中粘包的情况,而且很重要,所以,今天添 ...

  5. 【Socket】关于socket长连接的心跳包

    TCP的socket本身就是长连接的,那么为什么还要心跳包呢? 在smack里有个30s发送一个空消息的线程,同样关于心跳包(keepalive) 据网络搜索到的资料解释如下 内网机器如果不主动向外发 ...

  6. 关于socket长连接的心跳包

    出于最近对im研究的兴趣,看到smack里有个30s发送一个空消息的线程,了解了下关于心跳包,keepalive的知识. TCP的socket本身就是长连接的,那么为什么还要心跳包呢? 搜索到的资料解 ...

  7. Java中Socket通信-服务端和客户端双向传输字符串实现

    场景 什么是socket 在计算机通信领域,socket 被翻译为"套接字",它是计算机之间进行通信的一种约定或一种方式.通过 socket 这种约定,一台计算机可以接收其他计算机 ...

  8. 使用 Wireshark 对本地 socket 通信进行数据抓包

    通常在通信开发测试中,本机即充当了 server 端,也充当了 client 端,这时由于不经过网卡,使用 wireshark 无法对这个数据进行抓包分析 解决办法: 1.以管理员方式打开命令行 2. ...

  9. SOCKET通信中TCP数据包大小的确定

    MSS(maximun segment size)         最大分段大小,TCP有一个最大分段大小,用于通告对端每个分段中能发送的最大TCP数据量.MSS的目的是告诉对端其重组缓冲区大小的实际 ...

最新文章

  1. java orm 工具_GitHub - donnie4w/jdao: jdao是一个java的轻量级orm工具包
  2. iOS高级面试之NSRunLoop须知
  3. 图片缩放 算法 matlab,图像放大算法总结及MATLAB源程序.doc
  4. 《Data-Intensive Text Processing with mapReduce》读书笔记之一:前言
  5. Python编程基础:第二节 多重赋值Multiple Assignment
  6. Linux系统用户环境变量大全,linux系统和用户环境变量的配置文件
  7. centos6虚拟机复制后修改网卡
  8. 微信红包随机生成算法(PHP版)
  9. [2019杭电多校第一场][hdu6583]Typewriter(后缀自动机dp)
  10. CreateThread与_beginthread 内存泄漏的本质
  11. 图片压缩大小的3种方法,简单快捷实用!
  12. 卡方检验的统计量推导_解释相关性的卡方检验的所有统计量 - Minitab
  13. 使用开源软件FFmpeg将各种格式视频转换成MP4视频格式(最简单方法)
  14. 【机器翻译machine translation】
  15. Android stuido中更改图片编辑软件
  16. CVPR 2020 论文大盘点-人脸技术篇
  17. 零度之下代码输入不了_期末考试查分,基于青果高校教务系统的一个自动python脚本代码
  18. 微积分专项----MIT GS老师
  19. 视觉SLAM开源方案汇总及设备选型建议
  20. 检测到远端X服务正在运行中

热门文章

  1. OpenJudge NOI 1.7 08:字符替换
  2. 信息学奥赛一本通(1152:最大数max(x,y,z))
  3. 暑期训练日志----2018.8.19
  4. 单词排序(信息学奥赛一本通-T1185)
  5. 信息学奥赛C++语言: 蛇形方阵1
  6. 信息学奥赛一本通C++语言——1043:整数大小比较
  7. 信息学奥赛一本通C++语言——1018: 其他数据类型存储空间大小
  8. 新加坡教育(20181101)
  9. Python安装dlib包
  10. STM32那点事(4)_DMA(下)