美文网首页c#
获取本机IP地址-当无线和有线同时存在时的结果。

获取本机IP地址-当无线和有线同时存在时的结果。

作者: 么么gou的偷 | 来源:发表于2016-07-30 14:54 被阅读101次

    如题,最近一个项目遇到有线和无线同时存在的情况,项目大致需要先用UDP包获取到对端的IP,然后根据UDP包获取到的IP再进行TCP的传输。

    背景大致如此。然而在实际工作的时候,发现,,UDP包能收到但是收到的IP有问题。经过排查发现。原因是我的同事把一个不联网的路由器有线连在了需要获取IP的机器上,而该机器无线也开了(PS:相当于我的代码取错IP了)。因为UDP发的是广播包,所以不影响收发,但是TCP就不行了。

    为了解决奇怪的IP获取问题。

    下面上代码

    public static string GetSelfIP()
      {
       string ip = "0.0.0.0";
            System.Net.IPAddress[] addressList = Dns.GetHostEntry(Dns.GetHostName()).AddressList;//IP获取一个LIST里面有一个是IP
            //List里面有两个IP一共四个子项,若为一项就是LIST[1],为IP,若为四项就是LIST[2]为无线IP,LIST[3]为固定IP(有线IP)
            for (int i = 0; i < addressList.Length; i++)
            {
                //判断是否为IP的格式
                if (System.Text.RegularExpressions.Regex.IsMatch(Convert.ToString(addressList[i]), @"((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)") == true)
                {
                    ip = addressList[i].ToString();
                    return ip;
                }
            }
            return ip;  
    

    我解决的方法其实就是只添加了一句代码return ip,把我第一个得到的IP传回去,无线优先。

    此处可以看到下图,一共会显示两个IP,我是无线和有线一起开的,无线能联网,有线只连在路由器上面。在研究后发现,当有有线无线同时存在的时候第三个是无线,第四个是有线。当只有一种的时候就只有一个结果。这里的IP格式是用正则判断的。

    有线加无线.png
    下面是只有一个无线的时候的结果 无线.png

    如下就是IP获取的结果展示了。若有些什么想要交流的,请互相留言哟。

    这个就使得想要更加精准的获取到某种IP,甚至是有些意想不到的BUG哦。比如若是当有人用外接不联网路由让代码取到错误IP的情况之类的。

    相关文章

      网友评论

        本文标题:获取本机IP地址-当无线和有线同时存在时的结果。

        本文链接:https://www.haomeiwen.com/subject/pmhtsttx.html