代码

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

下面是客户端心跳包核心代码:
# 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&®istry[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 +++++++++++++++++++ 服务器的感觉系统

转载于:https://www.cnblogs.com/cyrix/articles/1706894.html

关于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. 大脑进化追不上社会文化:化石和脱氧核糖核酸证明人类大脑进化比社会慢
  2. oracle 数据分析函数,ORACLE分析函数(一)
  3. Web Service 开发系列文章之三(一个较小的契约优先的Web Service例子,用JavaApplication发布)...
  4. Mac OS使用技巧十九:Safari碉堡功能之二查看网页源代码
  5. 互联网1分钟 |1019
  6. Java过滤掉map集合中key或value为空的值
  7. CSS实现div梯形分割
  8. Ajax技术复习---狂神笔记
  9. Microsoft Visual Studio Installer Project模板下载太慢解决办法
  10. 中国汽车改装行业运营模式分析及投资战略规划研究报告2021年版
  11. mysql 存储微信表情
  12. 博客开通 坚持做自己懒得做但是正确的事情
  13. layui可以动态添加div吗_js 动态添加元素(div、li、img等)及设置属性的方法
  14. 今年春节北京烟花爆竹备货量下降46.7%
  15. walking机器人入门教程-slam_toolbox算法建图
  16. 数字逻辑educoder实训项目 logisim实现 交通灯系统设计超详细实验步骤,绝对完整
  17. 国企区块链应用进展年内已经突破50起 信任传递或引发区块链遍地开花
  18. 体育和旅游融合成为今夏显著的旅行趋势
  19. 计算机控制的节能路灯系统,路灯与PLC自动控制系统
  20. Sketch for Mac(矢量绘图软件)

热门文章

  1. 信息安全工程师笔记-数据库安全
  2. C++工作笔记-hiredis中关于ERR wrong number of arguments for HMSET问题的解决
  3. canvas笔记-canvas适应浏览器(填充整个页面)
  4. Java工作笔记-IntelliJ IDEA中高效文件切换跳转
  5. Qt工作笔记-QLineEdit用正则限制文本框的输入内容+正则表达式语法
  6. Qt工作笔记-把QTableWidget数据存为XML,启动时加载XML
  7. 大三软件工程小项目-小技术集合-tcp服务器搭建及客户端
  8. linux losetup命令,losetup命令_Linux losetup 命令用法详解:设定与控制循环(loop)设备...
  9. 安装ubuntu出现花屏_电脑显卡花屏怎么办?电脑独立显卡花屏的原因和解决方法...
  10. python单词词典_python:单词和词形词典