当前位置:编程学习 > asp >>

.NET 4.0网络开发入门之旅-- 我在“网” 中央(上)

注:

    这是一个针对 网络开发领域初学者 的系列文章,可作为《.NET 4.0 面向对象编程漫谈 》一书的扩充阅读,写作过程中我假设读者可以对照阅读此书的相关章节,不再浪费笔墨重复介绍相关的内容。

    对于其他类型的读者,除非您已经有相应的.NET 技术背景与一定的开发经验,否则,阅读中可能会遇到困难。

    我希望这系列文章能让读者领略到网络开发的魅力!

    另外,这些文章均为本人原创,请读者尊重作者的劳动,我允许大家出于知识共享的目的自由转载这些文章及相关示例,但未经本人许可,请不要用于商业盈利目的。

      本文如有错误,敬请回贴指正。

    谢谢大家!

 

                                                          金旭亮

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

点击以下链接阅读本系列前面的文章:

 

《“.NET 4.0 网络开发入门之旅系列文章” 开篇语—— 无网不胜》 
《 .NET 4.0网络开发入门之旅——IP知多少》

1 引子
   
    我相信几乎所有人都知道,Windows操作系统能自动检测出是否本地计算机已经连上网络,并且在任务栏右下角会显示相应的图标(图 1):

 \

图 1

    对于软件开发者而言,这一功能是比较有用的。比如,你可以在用户连上互联网时,自动检测你所开发的软件是否有更新。


    下面我们就聊聊如何在.NET应用软件中克隆Windows的这一功能。

    2 “你到底有几个好妹妹”?

   

    不要误会,我不是在教大家唱孟庭苇的这首歌,只是活跃一下气氛罢了。 :)


    在这里引用这句歌词,其目的是引出这样的一个问题:


    怎样知道本地计算机中安装了几块网卡?


    为什么要知道这个问题的答案?


    很简单,因为你要想知道计算机是否联上了网。


    当前的计算机不少都拥有两块以上的网卡,最典型的是笔记本,我们通常有两种方式联网:直接插入网线和使用无线路由器上网。在实际场景中也经常出现两种方式混用的情况(本地局域网的网线插上了,同时并未关闭无线网卡)。Windows很聪明,不管是不是同时混用这两种方式,只要有一个网卡可以连通 Internet,它就认为互联网是“可达”的。


    这里要说说“网卡”这个概念。


    “网卡”其实是一种通俗叫法,真正的术语是 “网络接口(Network Inte易做图ce) ”,以下是在易做图(Wikipedia)上找到的一段说明文字:

 


    Network inte易做图ce may refer to: Network inte易做图ce controller(即NIC), the device a computer uses to connect to a computer network.

 


    在网络应用开发中通常使用“网络接口”这一术语,当然,你将它理解为“网卡”,问题也不大,你不需要写Paper而是要写程序。    


    .NET基类库的System.Net.NetworkInformation命名空间中提供了一组类,可以方便地获取各种网络信息。


    以下这句代码获取本机的所有网络接口: 

 NetworkInte易做图ce[] nics  =  NetworkInte易做图ce.GetAllNetworkInte易做图ces();


    每个NetworkInte易做图ce对象都代表着本机的一个“真实”网络接口。


    获取NetworkInte易做图ce对象之后,通过它的属性可以获取丰富的网络信息。


    以下方法显示一个网络接口的基本信息(参看示例程序GetLocalhostInformation):


private   static   void  ShowNetworkInte易做图ceBasicInfo(NetworkInte易做图ce nic)
{
    Console.WriteLine( " 名字(Name):{0} " , nic.Name);
    Console.WriteLine( " 描述(Description):{0} " ,  nic.Description);
    Console.WriteLine( " id:{0} " , nic.Id);
    Console.WriteLine( " 物理地址:{0} " ,BitConverter.ToString(
            nic.GetPhysicalAddress().GetAddressBytes()));
    Console.WriteLine( " 是否仅接收数据包(IsReceiveOnly):{0} " ,
            nic.IsReceiveOnly);
    Console.WriteLine( " 类型(NetworkInte易做图ceType):{0} " ,
            nic.NetworkInte易做图ceType);
    Console.WriteLine( " 是否可接收多播数据包: "   +  nic.SupportsMulticast);
    Console.WriteLine( " 当前操作状态: "   +  nic.OperationalStatus);
}

    以上是上述方法在笔者计算机上的输出:


    名字(Name):本地连接
    描述(Description):Broadcom NetLink (TM) Gigabit Ethernet
    id:{E0DE0334 - 1A45 - 45DE - 8259 - 7A3AD2F7B8DA}
    物理地址:F0 - 4D - A2 - DA - 70 - D7
    是否仅接收数据包(IsReceiveOnly):False
    类型(NetworkInte易做图ceType):Ethernet
    是否可接收多播数据包:True
     当前操作状态:Up
    特别注意网络接口的OperationalStatus属性(当前操作状态),为“Down”的网络接口是不可用的。


    通过NetworkInte易做图ce对象的GetIPProperties方法可以获取IPInte易做图ceProperties对象,它包容了一个网络接口与IP相关的所有信息:其中与连网相关的最重要信息是网关和DNS服务器地址:

 


private   static   void  ShowNetworkInte易做图ceIPProperties(NetworkInte易做图ce nic)
{
    IPInte易做图ceProperties ipProperties  = nic.GetIPProperties();
    // ……更多代码略
    GatewayIPAddressInformationCollection gatewayInfo  = ipProperties.GatewayAddresses;
    foreach  (GatewayIPAddressInformation info  in  gatewayInfo)
        Console.WriteLine( " 网关(Gateway)地址:{0} " , info.Address);
    ipAddresses  =  ipProperties.DnsAddresses;
    foreach  (IPAddress info  in  ipAddresses)
        Console.WriteLine( " DNS Server地址:{0} " , info);
}

 

    以下是笔者计算机中本地网络接口的相关信息:


    DNS后缀名:
    单播(Unicast)地址:fe80::b0f5:7eaa:3b79:102e % 11
    单播(Unicast)地址: 192.168 . 1.100
    多路广播(Multicast)地址:ff01:: 1 % 11
    ……
    多路广播(Multicast)地址: 224.0 . 0.1
    多路广播(Multicast)地址: 224.0 . 0.252
    多路广播(Multicast)地址: 239.255 . 255.250
    网关(Gateway)地址: 192.168 . 1.1
    DHCP Server地址: 192.168 . 1.1
    DNS Server地址: 192.168 . 1.1


    由于笔者家里采用无线路由器+ADSL宽带上网,所以网关地址和DNS服务器地址都是“192.168.1.1”,它是无线路由器的默认地址。如果是在一个比较大的局域网中,网关和DNS通常不会相同,而且DNS服务器通常会有两个。


    另外,注意IP地址分为单播和多路广播两大类,在后面的文章中会介绍基于多播特性开发的一些典型网络应用程序。

3 Ping

    Ping命令可以说是最常用的检测网络连通性的命令了,.NET基类库

补充:Web开发 , ASP.Net ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,