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

如题,最近一个项目遇到有线和无线同时存在的情况,项目大致需要先用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的情况之类的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 13,158评论 6 174
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,107评论 0 8
  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    保川阅读 5,992评论 1 13
  • 名词延伸 通俗的说,域名就相当于一个家庭的门牌号码,别人通过这个号码可以很容易的找到你。如果把IP地址比作一间房子...
    杨大虾阅读 20,659评论 2 56
  • 一趟马烧下来,回到家里坐下,头脑里很不平静,老是晃动着那些早已不在人世的乡亲的影子。这些人默默地来到这个世上...
    马少军阅读 461评论 0 2