读书人

定时检测 是不是连接了服务器

发布时间: 2012-09-03 09:48:39 作者: rapoo

定时检测 是否连接了服务器

C/C++ code
定时检测是否通信需求: 程序界面非常简单,有一个“连接服务器”,“停止连接”2个按钮,点击“连接”后,则开始连接服务器,然后发送心跳包给服务器,服务器收到后,则回应 客户端。客户端需要定时检测是否与服务器连接,如果没有,则不会去连接,仅仅做的是 在界面的一个控件上显示没有连接而已。我采用了定时器去检测(部分人会说用线程,这个可以采用,不是问题重点),程序启动后,当没有点击连接按钮,是不会去连接服务器,但是定时器已经开始工作了, 它检测是否断线的凭据:有没有收到服务端发送过来的回应。如果有回应,那么则认为连接;否则没有。遇到的问题:界面中增加了一个变量,CTime的, 记录上一次服务器回应客户端的时间。定时器函数自然是,获得目前的时间,然后减去上一次回应客户端的时间。 如果超时,则提示,没有则不提示。(定时器:无论有没有手动去连接服务器,它都会检测,OnInitDialog中 对上一次服务器回应客户端的时间赋值(初值),定时器在这里安装(OnInitDialog里安装定时器)。安装后则开始检测了。 遇到的问题:程序没手动连接 服务器,界面会提示 已经连接了。 随后才提示 没有连接。原因:必然是 定时器安装过早了。 超时一般都好几秒钟,而在OnInitDialog中安装后,OnTimer随后就运行,自然获得时间差 会比超时短很多。所以最初界面会提示 ”已经连接“请不要说:你把超时设置短一些, 不肯能的,在OnInitDialog中安装后,OnTimer随后就运行,可能都不要1秒钟。我不能做到设置的很短。


[解决办法]
貌似你依赖“上次收到心跳包时间”这个变量来判断是否连接。初始化一下。比如CTime的话,可以初始化为1970年1月1日。

读书人网 >VC/MFC

热点推荐