C#之获取本地IP地址

最近协助一个项目解决了一个获取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地址。

 

转载于:https://www.cnblogs.com/wustjz/p/4770009.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值