码迷,mamicode.com
首页 > Windows程序 > 详细

C#之获取本地IP地址

时间:2015-08-29 22:59:50      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:

最近协助一个项目解决了一个获取IP地址的问题,手机客户端与WebService进行通讯,然后WebService通过TCP通讯把指令传递到另一台PC机上。在测试的过程中,总是会出现WebService服务器和PC机通讯失败的问题,但是用TCP调试工具进行通讯调试这两台机器是可以进行通讯的,进行调试好了之后,换了另外的网络环境又通讯不了。最后拿到了代码,排查出来是IP地址获取的问题。

原始代码获取IP地址是通过Dns.GetHostAddresses(Dns.GetHostName())进行获取IP地址数组,然后再数组中获取IP地址的:

技术分享

原来写的代码获取的是数组中的第三个值,在其中写死,在测试环境上就已经测试通过,但是换了客户环境通讯又失败,无奈用Fildder进行排查,通讯的地址有问题,就排查到IP地址获取错误,通过网上查找资料,获取IP地址换成:

1 public static IPAddress localip = Dns.GetHostAddresses(Dns.GetHostName())
2       .Where(ip => ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
3       .First();

Dns.GetHostAddresses(Dns.GetHostName())中获取IP地址为IPV4、IPV6,多块网卡(包括虚拟网卡)的地址,网络环境不同,获取的数据就不一样,导致获取本机IP地址出现错误。

在对IP地址进行筛选

1 Dns.GetHostAddresses(MachineName)
2      .Where(ip => ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
3      .First()

是筛选ip v4 。

1 Dns.GetHostAddresses(MachineName)
2      .Where(ip => ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
3      .First()

是筛选V6的ip地址。

 

C#之获取本地IP地址

标签:

原文地址:http://www.cnblogs.com/wustjz/p/4770009.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!