• 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地址。


    作者:青春茧
    出处:http://www.cnblogs.com/wustjz/
    本文版权归青春茧和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    sed command
    【Python3】作用域(局部变量、全局变量)
    【Python3】函数与参数
    【Python3】编程范式
    【Python3】字符解码与编码
    【Python3】文件操作
    【Python3】集合
    【Python3】目录
    【Python3】字典
    【Python3】字符串操作
  • 原文地址:https://www.cnblogs.com/wustjz/p/4770009.html
Copyright © 2020-2023  润新知