按照老规矩,也是朋友的建议,老周今天在吹牛之前,先讲一个小故事。

有朋友问我,老周,你现在还发短信吗,你每个月用多少电话费?唉,实话说,现在真的发短信不多了,套餐送的130条短信,每月都发不了一条。至于电话费嘛,基本上是交月租,通话费用可能平均不到1块钱,多的可能就几块钱。老周的单次通话时间一般不会长,长达半小时的通话也是偶然发生,多数情况下就说几句话而已,别说废话,长话短说,说完挂机。

有人会问,那如果要多聊一会儿呢,那就开聊天工具,聊语音。反正用的是光纤包年,多说几句废话也不花钱。

该省的钱就省,老周向来有钱也不随便花,该用则用,把钱拿出来去买些可以增值的收藏品,或者搞些风险不太大的投资也不错。很多时候,老周宁可买个工艺品放在书桌上,也不会去买电影票。想想买张电影票,看一两个小时就完了,什么都没留下,再说了,近些年来烂片太多了,现在的导演编剧演员们,艺术修养太低,尽拍些挑战智商底线的片子,看这种电影根本不值,这些鬼片顶多值1分钱。我还不如买些有层次有品位的东西摆在家里,我还可以天天看。

===============================================================

好,故事讲完了,咱们说正经话,今天说说在UWP应用中怎么获取本机的IP地址。我不记得以前有没有写过类似的文章,也不知道别人有没有写过,如果你懂了,就不用看下文了,你就当老周扯了废话就行了。

老周写博客向来很随意,绝对不严肃,不是老周对待知识不认真,而是老周性情如此,从来不喜欢过多的约束,因此,与其说是博文,不如说是随笔,就是随意下笔,只要不伤大雅就好。

在Windows.Networking.Connectivity命名空间下,有一个类叫NetworkInformation,它有个静态的公共方法叫GetHostNames,调用它就可以获取本机的机器名了。

有朋友会说了,这真TMD太简单了,别高兴得太早,你用了就知道了。方法调用是简单,然而它返回的是N个HostName实例,这可就有点XX了,多个HostName,我到底要选用哪个?

先看看,HostName类有个Type属性,它是一个HostNameType枚举值,如果是计算机名(比如“MyPC”),类型就为DomainName,如果是蓝牙网卡上的地址,则为Bluetooth,如果是IP地址,有两个值——Ipv4和Ipv6。

在多数情况下,都会用IP地址,所以你会想到,当调用 NetworkInformation.GetHostNames() 方法得到HostName列表后,可以用其Type属性来筛选出表示IP地址的Hostname实例。现在用得多的是v4的IP地址,如192.168.0.20。

好,第一个问题解决了,然而新问题来了,我虽然筛选出了表示IP的主机名,但是,我想用的是通过Wi-Fi连接的IP地址,那怎么办呢?

没事,咱们接着分析。当你确认了某个HostName对象是IP地址表示时,可以访问它的IPInformation属性,这时你会得到一个IPInformation实例。

随后,你会发现,IPInfomation类有个NetworkAdapter属性,访问它,获得一个NetworkAdapter实例。这个NetworkAdapter实例表示的是这个主机名所代表连接的网络适配器的信息,你不妨理解为就是连接了网络的那个网卡(当然包括无线网卡)。

接着,你又发现,NetworkAdapter类有个属性叫IanaInterfaceType,它是一个int类型。

现在,你离真相只有一步之遥了。这个整数值你可别小看它,它可以用来标识网络接口类型。这些值在MSDN上都有,为了大家省事,我就抄了一部分下来,请看:

6 —— 以太网;

23 —— PPP 网络接口(专用名词,可以网上搜,了解一下就行了,不用死记);

24 —— 软件回环接口;

37 —— ATM 网络接口;

71 —— 无线网络接口(这个是重点);

1 —— 其他接口。

要判断是否为无线网络接口,你就看它是不是71就好了。

至此,相信大家心中的疑问都消散得差不多了,不知道老周这样讲解,你懂否?

不扯了,可以上代码了。

            // 获取本地主机名称列表
var hosts = NetworkInformation.GetHostNames();
// 筛选无线或以太网
var host = hosts.FirstOrDefault(h =>
{
bool isIpaddr = (h.Type == Windows.Networking.HostNameType.Ipv4) || (h.Type == Windows.Networking.HostNameType.Ipv6);
// 如果不是IP地址表示的名称,则忽略
if (isIpaddr == false)
{
return false;
}
IPInformation ipinfo = h.IPInformation;
// 71表示无线,6表示以太网
if (ipinfo.NetworkAdapter.IanaInterfaceType == || ipinfo.NetworkAdapter.IanaInterfaceType == )
{
return true;
}
return false;
});
if (host != null)
{
tb.Text = host.DisplayName; //显示IP
}

运行的结果如下图所示。

好了,这次的内容就说到这里了,改天,和大家聊聊跟 Socket 有关的话题。

示例源代码下载地址

【Win 10 应用开发】获取本机的IP地址的更多相关文章

  1. Java 工具类 IpUtil - 获取本机所有 IP 地址,LocalHost 对应地址 IP

    Java 工具类 IpUtil - 获取本机所有 IP 地址,LocalHost 对应地址 IP IP 工具类 源代码: /** * <p> * * @author XiaoPengwei ...

  2. 获取本机的IP地址(局域网)与主机名称

    编写内容保存为bat @echo off &setlocal enabledelayedexpansion Rem '/*========获取本机的IP地址(局域网)=========*/ e ...

  3. 获取本机的IP地址和mac地址

    1. 以前一直用ipconfig来查看ip地址,哈哈哈,现在发现挺好玩 #获取本机的IP地址和mac地址 import uuid import socket def get_mac_address() ...

  4. 获取本机的ip地址(排除虚拟机,蓝牙等ip)

    项目中遇到了要获取本地ip的需求,网上查找资料遇到很多坑,很多Java获取本机ip地址的方法要么是根本获取不到,要么是获取的有问题. 网上常见的方法如下 InetAddress.getLocalHos ...

  5. C++获取本机的ip地址程序

    #include <WinSock2.h> #pragma comment(lib,"ws2_32") //链接到ws2_32动态链接库 class CInitSock ...

  6. 怎样获取本机的ip地址

    首先介绍一下用到的结构体 struct hostent { const char *h_name; // official name of host char **h_aliases; // alia ...

  7. android获取本机的IP地址和mac物理地址

    /获取本机IP地址 public String getLocalIpAddress() { WifiManager wifiManager = (WifiManager) getSystemServi ...

  8. C#获取本机IP方法,获取本机局域网IP地址方法

    1. private void GetIP() { string hostName = Dns.GetHostName();//本机名 //System.Net.IPAddress[] address ...

  9. 获取本机的IP地址

    /// <summary> /// 获取本机IP地址 /// </summary> /// <returns>本机IP地址</returns> publ ...

随机推荐

  1. 总结:Mac前端开发环境的搭建(配置)

    新年新气象,在2016年的第一天,我入手了人生中第一台自己的电脑(大一时好友赠送的电脑在一次无意中烧坏了主板,此后便不断借用别人的或者网站的).macbook air,身上已无分文...接下来半年的房 ...

  2. 【趣事】用 JavaScript 对抗 DDOS 攻击

    继续趣事分享. 上回聊到了大学里用一根网线发起攻击,今天接着往后讲. 不过这次讲的正好相反 -- 不是攻击,而是防御.一个奇葩防火墙的开发经历. 第二学期大家都带了电脑,于是可以用更高端的方法断网了. ...

  3. 简单粗暴地理解js原型链--js面向对象编程

    原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢在网上找点原型链和闭包的文章看,效果极好. 不要纠结于那一堆术语了,那除了让你脑筋拧成麻花,真的不能帮你什么.简单粗暴点看原型链吧, ...

  4. JAVA for mac 的学习之路

    要学习一门新技术,首先得下载相关的工具. 一 . 下载相关工具 1. 下载 jdk formac 下载地址为:http://www.oracle.com/technetwork/java/javase ...

  5. ASP.NET MVC5+EF6+EasyUI 后台管理系统(68)-微信公众平台开发- 资源环境准备

    系列目录 前言: 本次将学习扩展企业微信公众号功能,微信公众号也是企业流量及品牌推广的主要途径,所谓工欲善其事必先利其器,调试微信必须把程序发布外网环境,导致调试速度太慢,太麻烦! 我们需要准备妥当才 ...

  6. mysql源码包手动安装、配置以及测试(亲测可行)

    笔记编者:小波/qq463431476博客首页:http://www.cnblogs.com/xiaobo-Linux/ 记下这篇mysql笔记,望日后有用! redhat6采用centos yum源 ...

  7. OpenGL ES: Array Texture初体验

    [TOC] Array Texture这个东西的意思是,一个纹理对象,可以存储不止一张图片信息,就是说是是一个数组,每个元素都是一张图片.这样免了频繁地去切换当前需要bind的纹理,而且可以节省系统资 ...

  8. 第14章 Linux启动管理(2)_启动引导程序grub

    2. 启动引导程序grub 2.1 Grub配置文件 (1)grub中分区的表示 硬盘 分区 Linux设备文件名 Grub中设备文件名 第1块SCSI硬盘 第1个主分区 /dev/sda1 hd(0 ...

  9. 学习笔记 :DrawText

    最近在做一个TStringGrid的自绘处理,在画文字处理上遇到了高度的计算问题.后来经过一段时间还是找到了一些方法: 1.使用TLabel 这个方法是有点绕路的,方法倒是简单,就是使用AutoSiz ...

  10. Alwayson的IP冲突

    Alwayson的IP冲突 https://social.technet.microsoft.com/Forums/office/en-US/4d50cb1c-eef7-4dcc-b937-3c8eb ...