问题描述
IPHostEntryiph=Dns.GetHostEntry(Dns.GetHostName());IPAddressio=iph.AddressList[0];foreach(IPAddressipiniph.AddressList){Console.WriteLine(ip.ToString());}Console.ReadKey();最后的输出结果是:fe80::118a:2f6d:22cb:ff7d%112002:6ebb:37df::6ebb:37df169.254.255.125110.187.55.223怎么会有4个结果呢?而且通过“好123”的IP地址查询,只有最后那个能对上,请问,是什么原因?如果在程序中需要本地IP地址,该怎么取舍呢?
解决方案
解决方案二:
IPAddress[]addrIP=Dns.GetHostAddresses(Dns.GetHostName());Console.WriteLine(addrIP[0].ToString());
解决方案三:
通常addressList[]所得到的列表就是当前的IP地址;如果当前是拨号上网的话addressList[0].ToString()就是本地IP地址;addressList[1].ToString()就是上网地址。如果当前是使用[EnterNet300]拨号上网的话addressList[1].ToString()就是本地IP地址;addressList[0].ToString()就是上网地址。如果程序只能够检测到只有一个IP地址的话,证明当前电脑没有在线!
解决方案四:
//以下两个是IPv6的地址fe80::118a:2f6d:22cb:ff7d%112002:6ebb:37df::6ebb:37df//以下两个是IPv4的地址//这是你本地连接的地址,估计你没有给网卡配置本地IP,所以Windows分配了一个保留地址给你的网卡169.254.255.125//这是你通过PPPoE获得的公网IP110.187.55.223
解决方案五:
一般本机IP用127.0.0.1或localhost,至于为啥最后一个对,因为最后一个是你拨号产生的,也就是最后产生的,先排除非IPV4格式的地址,然后取最后一个IPV4的地址即可。
解决方案六:
一个内网IP一个外网IP。
解决方案七:
ipv4ipv6局域网公网
解决方案八:
我以前也碰到了这个问题是因为机器开启了ipv4ipv6之类的东西后来把居然把整整一大堆IP地址全部存到数据库了没有过多去研究这个关注这个问题也许自己的问题也会在这个帖子里解决!
解决方案九:
引用7楼的回复:
我以前也碰到了这个问题是因为机器开启了ipv4ipv6之类的东西后来把居然把整整一大堆IP地址全部存到数据库了没有过多去研究这个关注这个问题也许自己的问题也会在这个帖子里解决!
哦...............
解决方案十:
孤陋寡闻。我的一个电脑装过VMWare虚拟,于是它就虚拟出来3个网卡,于是我的电脑仅ipv4MAC和IP地址就有5个。我现在用的笔记本至少有4个ipv4地址,因为有4个网络适配器。一个是我的蓝牙驱动虚拟出的网卡,一个是普通rj45以太网卡适配器,一个是无线网络适配器,一个是windows虚拟WIFI适配器。我的另外一个笔记本有更多的是适配器。.......不知道一台机器可以有很多ipv4地址,真是应该好好学学电脑知识了,不然连居委会的大妈都不如了。
解决方案十一:
引用楼主的回复:
如果在程序中需要本地IP地址,该怎么取舍呢?
如果有人告诉你“写一个tcp服务监听要使用iph.AddressList[0]”的话,你直接“喷”它好了。有个实习生告诉我某个培训学校的视频上的老师就是这样写的。作为服务,要使用IPAddress.Any,这是常识。
解决方案十二:
该回复于2012-04-23 09:23:15被版主删除
解决方案十三:
霸气引用10楼的回复:
引用楼主的回复:如果在程序中需要本地IP地址,该怎么取舍呢?如果有人告诉你“写一个tcp服务监听要使用iph.AddressList[0]”的话,你直接“喷”它好了。有个实习生告诉我某个培训学校的视频上的老师就是这样写的。作为服务,要使用IPAddress.Any,这是常识。
解决方案十四:
IPAddress[]addrIP=Dns.GetHostAddresses(Dns.GetHostName());Console.WriteLine(addrIP[0].ToString());
解决方案十五:
每个网卡都有二个地址,一个局域网地址和一个外网地址,索引号相对较小的是局域网地址
解决方案:
该回复于2012-04-23 15:55:57被版主删除
解决方案:
你这里获取的有IP4和IP6的版本,必须要判断一下,InterNetwork是IP版本4的地址。然后在获取了IP4的地址后要一个break,不然还是会继续把IP6的也获取了。希望对你有帮助。IPHostEntryiph=Dns.GetHostEntry(Dns.GetHostName());IPAddressio=iph.AddressList[0];for(inti=0;i<iph.AddressList.Length;i++){if(iph.AddressLis[i].AddressFamily==AddressFamily.InterNetwork){stringsvrAddress=iph.AddressList[i].ToString();Console.WriteLine(svrAddress.ToString());break;}}Console.ReadKey();有什么不明白的可以在这里一起探讨一下。