如何实现当外网IP改变时自动通知的效果?
来源:广州中睿信息技术有限公司官网
发布时间:2012/10/21 23:25:16 编辑:itlead 阅读 1565
有时候需要在家里连接公司的服务器,但是它的外网IP会经常变换。当然可以用花生壳之类来解决,不过作为程序员,还是尝试用程序的方法解决吧。接口定义Windows里在外网IP改变时好像没有现成的事件,所以

 

  有时候需要在家里连接公司的服务器,但是它的外网IP会经常变换。当然可以用花生壳之类来解决,不过作为程序员,还是尝试用程序的方法解决吧。

  接口定义

  Windows里在外网IP改变时好像没有现成的事件,所以定义了这样一个接口IPublicIPMonitor:

  

  当监测到IP改变时会触发一个事件PublicIpChanged,有两个方法分别用来开始和停止监测。

  事件参数PublicIpChangedEventArgs的定义如下,只有一个叫IP的属性:

  

  还有一个IPublicIPNotifyReceiver的接口用来对IP改变事件进行响应:

  

  它可以监听某个IPublicIPMonitor并在OnPublicIPChanged里响应。

  IPublicIPMonitor实现

  实现思路是定时去获取当前IP,如果和之前保存的IP不一样的话则触发PublicIpChanged事件:

  

  IPublicIPNotifyReceiver实现   可以用短信、邮件等等需要的方式响应IP改变事件,这里用邮件做例子:

        //设置邮件的标题            //设置邮件的发件人   //Pass:如果不想显示自己的邮箱地址,这里可以填符合mail格式的任意名称,真正发mail的用户不在这里设定,这个仅仅只做显示用           //设置邮件的收件人            //设置邮件的内容         //设置邮件的格式         //设置邮件的发送级别          //设置用于 SMTP 事务的主机的名称,填IP地址也可以了       //设置用于 SMTP 事务的端口,默认的是 25       //这里才是真正的邮箱登陆名和密码,比如我的邮箱地址是 hbgx@hotmail, 我的用户名为 hbgx ,我的密码是 xgbh    

  //都定义完了,正式发送了,很是简单吧!   

  在EmailNotifyReceiver的构造函数里,程序从EmailNotifyReceiverAddress.config里读取需要接收通知的邮件地址(用,隔开)。然后在OnPublicIPChanged里尝试给他们发邮件。

  程序入口   现在已经可以实现我们需要的功能了,我们可以把IPublicIPMonitor的实现放在一个Windows服务里,然后在其OnStart方法里添加下面代码:

    

  ImplementsLoader类   在上面的代码里有这样一个方法ImplementsLoader.LoadImplementsOf<IPublicIPNotifyReceiver>()。它的作用是获取程序所在目录所有的IPublicIPNotifyReceiver的实现。这样当我们添加一个新的接收者的时候不需要改现有代码,只要实现IPublicIPNotifyReceiver接口,然后把这个dll复制到程序目录下就可以了。

     

  一些改进想法   在程序入口里创建IPublicIPMonitor实例的时候,可以用ioc或者读取配置文件等方式。还有EmailNotifyReceiver在代码里写发送者的邮箱密码也不太好,可以放到配置文件里并做加密。。。

 

本站技术原创栏目文章均为中睿原创或编译,转载请注明:文章来自中睿,本站保留追究责任的权利。

 

 

联系我们CONTACT 扫一扫
愿景:成为最专业的软件研发服务领航者
中睿信息技术有限公司 广州•深圳 Tel:020-38931912 务实 Pragmatic
广州:广州市天河区翰景路1号金星大厦18层中睿信息 Fax:020-38931912 专业 Professional
深圳:深圳市福田区车公庙有色金属大厦509~510 Tel:0755-25855012 诚信 Integrity
所有权声明:PMI, PMP, Project Management Professional, PMI-ACP, PMI-PBA和PMBOK是项目管理协会(Project Management Institute, Inc.)的注册标志。
版权所有:广州中睿信息技术有限公司 粤ICP备13082838号-2