在TCP协议的机制里面,本身是存在有心跳包机制的,也就是TCP协议中的SO_KEEPALIVE,系统默认是设置2小时的心跳频率。需要用要用setsockopt将SOL_SOCKETSO_KEEPALIVE设置为1才是打开,并且可以设置三个参数tcp_keepalive_time/tcp_keepalive_probes/tcp_keepalive_intvl,分别表示连接闲置多久开始发keepalive的ACK包、发几个ACK包不回复才当对方死了、两个ACK包之间间隔多长。
TCP协议会向对方发一个带有ACK标志的空数据包(KeepAlive探针),对方在收到ACK包以后,如果连接一切正常,应该回复一个ACK;如果连接出现错误了(例如对方重启了,连接状态丢失),则应当回复一个RST;如果对方没有回复,服务器每隔多少时间再发ACK,如果连续多个包都被无视了,说明连接被断开了。
“心跳检测包”是属于TCP协议底层的检测机制,上位机软件只是解析显示网口的有用数据包,收到心跳包报文属于TCP协议层的数据,一般软件不会将它直接在应用层显示出来,所以看不到。以太网中的“心跳包”可以通过“以太网抓包软件”分析TCP/IP协议层的数据流看到。报文名称”TCP Keep-Alive”。
一些比较可靠的以太网转串口模块,都有心跳包的检测,比如致远电子的ZNE-100TL模块,配置“心跳包检测”间隔时间设为“10”秒,使用一款”wireshark”的抓包软件来实际查看下TCP/IP协议层“心跳包”数据。1、服务器端运行一个常驻线程,用于实时检查在线列表中,是否存在超时用户,有的话,就做相应处理,并将用户从在线列表中删除
2、用户登陆成功后,在客户端用JavaScript,使用定时器,每间隔固定时间(比如20秒),通过Ajax异步发送请求服务器某个页面,或者WebService之类的接口。这就是所谓的心跳请求。
3、服务器收到用户的心跳请求后,更新用户最后一次联系服务器的时间。
这样服务器检查超时的时候,实际上就可以把当前时间,减去用户最后一次联系服务器的时间,如果超过一个指定值,比如1分钟,那就认为这个用户离线了。
PS:原理很简单,但要设计一个高效的机制,还是要多考虑实现的算法,特别是服务器端的在线列表,和检查超时的机制。我曾经在几年前做了一个实现,后来重写了N遍,才发现了一个相对比较合理的方法。您说的这款软件,我没有使用过。
监控软件,我使用的是电脑监控专家。
电脑监控专家不仅可以记录所有的键盘输入,进行QQ聊天,MSN聊天记录的查看和上网监控,并且对电脑屏幕进行定时拷屏,对打开窗口和浏览的网站进行记录。
你还可以禁止打开指定的窗口和程序、禁止运行聊天软件,下载软件(迅雷、BT等)和游戏软件等。如果尝试打开或运行这些被你禁止的窗口和程序会被立即关闭并记录下来。
另外,软件还可以把所有监控的信息(键盘输入记录,屏幕截图等)发送到你指定的邮箱,让你轻松实现网络监控。本软件安装后,不留任何痕迹,并且采用热键启动的办法,让你在神不知,鬼不觉的情况下监控你想监控的电脑。
这款软件你觉得怎么样,如果觉得可以你现在就可以在百度上搜索电脑监控专家然后下载试用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)