说起网络应用编程,想到最多的就是聊天类的软件。当然,在这类软件中,一般都会有一个用户掉线检测功能。今天我们就通过使用自定义的HeartBeat方式来检测用户的掉线情况。

心跳包实现思路

我们采用的思路是:客户端连接上服务端以后,服务端维护一个在线用户字典,客户端每隔一段时间,向服务器发送一个心跳包,服务器接收到包以后,字典数据的值都会更新为0;一旦服务端超过规定时间没有接收到客户端发来的包,字典数据将会递增加一,当字典数据的值累计大于等于三,则视为掉线。

TCP之心跳包实现思路

代码逻辑

客户端每隔一段时间,发送一个心跳包:

#region 心跳Timer计数事件
        private void heartbeatTimer_Tick(object sender, EventArgs e)
        {
            currentCount++;
            if (currentCount == heartbeatCount)
            {
                txtMessage.Append("开始发送心跳包");
                MessageEntity entity = new MessageEntity();
                entity.MessageType = MessagePicks.Heartbeat;
                entity.NickName = loginName;

                WriteToStream(entity);
                currentCount = 0;
            }
        }
        #endregion
View Code

相关文章: