检查网线的通断情况
在编写tcp/ip服务程序时,需要 bind 到本地端口,再开始 listen 接收外部请求。如果是只bind
到指定的一个ip地址,而这个ip对应的网卡上网线被拨掉时,如果经过一段时间后再插上,也不能再
接受新的连接请求了。
一般在这种情况下,需要在网线恢复后,重新 bind 端口,开始listen。这样就需要在网线拨掉后,
能停止服务,而网线恢复后,再开始服务。
在Windows中,可以用NotifyAddrChange向系统注册一个事件,当网络发生变化时得到事件通知。但
是使用这种方法会比较大的影响系统性能,有时还会系统死锁,插拨好几次网线才能恢复。
为了方便使用,我采用的是每隔一秒查询一次网络接口,查找指定的IP还在不在,如果不在就认为网
络断开,如果有则认为正常。方法有些笨,管用就行。基本上与QQ同时检测到断开,网络插上时也基
本上与QQ同时恢复。
程序做成 dll的方式,方便其他程序直接使用,调用的接口是
function CheckNICStatus(pAddr:pchar):Integer;stdcall;
导入这个函数就可以用了,pAddr指向要监控的IP地址。返回0表示正常,-1表示断线。
两种方法都有实现,但是感觉用定期去查的方法更方便。
以下是检查网络接口的源码。


























