zoukankan      html  css  js  c++  java
  • .net网络编程(2)网络适配器

    .NET 4.0网络开发入门之旅——我在“网” 中央

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

    一.NetworkInterface(网络适配器)

    即我们平时查看网卡信息

    image

    图1

    image

    图2
    1.获取本地网络接口信息

    NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
    

    2.显示某个网络接口信息

    private static void ShowNetworkInterfaceBasicInfo(NetworkInterface 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("类型(NetworkInterfaceType):{0}",
                nic.NetworkInterfaceType);
        Console.WriteLine("是否可接收多播数据包:" + nic.SupportsMulticast);
        Console.WriteLine("当前操作状态:" + nic.OperationalStatus);
    }
    

    image

    3.IPInterfaceProperties

    提供有关支持 Internet 协议版本 4 (IPv4) 或 Internet 协议版本 6 (IPv6) 的网络接口的信息

    从图2中可以看到,还提供了很多Ipv4信息,可以用过,以下两个方法返回相应的信息

    image

    或者直接从IPInterfaceProperties中获取一些公共的信息,假设要在.net中自己做一个网络连接详细信息的界面,就可以用到这些信息,以下属性可以与图2中的信息相对应

    image

    示例:

    private static void ShowNetworkInterfaceIPProperties(NetworkInterface adapter)
    {
        IPInterfaceProperties adapterProperties = adapter.GetIPProperties();
        // Try to get the IPv4 interface properties.
        IPv4InterfaceProperties p = adapterProperties.GetIPv4Properties();
    
        
        // Display the IPv4 specific data.
        Console.WriteLine("  Index ............................. : {0}", p.Index);
        Console.WriteLine("  MTU ............................... : {0}", p.Mtu);
        Console.WriteLine("  APIPA active....................... : {0}",
            p.IsAutomaticPrivateAddressingActive);
        Console.WriteLine("  APIPA enabled...................... : {0}",
            p.IsAutomaticPrivateAddressingEnabled);
        Console.WriteLine("  Forwarding enabled................. : {0}",
            p.IsForwardingEnabled);
        Console.WriteLine("  Uses WINS ......................... : {0}",
            p.UsesWins);
    }
    

    结果

    image

    4.判断是否有任何可用的网络连接

    如果有任何网络接口标记为“up”而且不是环回或隧道接口,则认为有可用的网络连接。

    用NetworkInterface的静态方法GetIsNetworkAvailable.

    其内部实现大致如下

    internal static bool InternalGetIsNetworkAvailable()
    {
    
        foreach (NetworkInterface interface2 in NetworkInterface.GetAllNetworkInterfaces())
        {
            if (((interface2.OperationalStatus == OperationalStatus.Up) &&
                 (interface2.NetworkInterfaceType != NetworkInterfaceType.Tunnel)) &&
                (interface2.NetworkInterfaceType != NetworkInterfaceType.Loopback))
            {
                return true;
            }
        }
        return false;
    }
    

    5.监听网际接口

    比如网络突然断开,禁用网络,硬件故障时.这时程序就需要额外的处理

    使用.net提供的NetworkChange的静态事件NetworkChange,可以非常方面的监听网络接口

    来自MSDN的例子

    using System;
    using System.Net;
    using System.Net.NetworkInformation;
    
    namespace Examples.Net.AddressChanges
    {
        public class NetworkingExample
        {
            public static void Main()
            {
                NetworkChange.NetworkAddressChanged += new
                NetworkAddressChangedEventHandler(AddressChangedCallback);
                Console.WriteLine("Listening for address changes. Press any key to exit.");
                Console.ReadLine();
            }
            static void AddressChangedCallback(object sender, EventArgs e)
            {
                NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
                foreach (NetworkInterface n in adapters)
                {
                    Console.WriteLine("   {0} is {1}", n.Name, n.OperationalStatus);
                }
            }
        }
    }
    
  • 相关阅读:
    3月16日
    11月8日
    Code4 APP
    为什么alertView弹出后button会消失的问题
    设置某个类使用或者禁用ARC
    Bundle使用&NSBundle
    respondsToSelector
    NSDate获取当前时区的时间
    iOS enum 定义与使用
    IOS开发之纯代码界面--基本控件使用篇 ┊
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1955310.html
Copyright © 2011-2022 走看看