标签:
最近协助一个项目解决了一个获取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地址。
标签:
原文地址:http://www.cnblogs.com/wustjz/p/4770009.html