您的位置:首页 > 理论基础 > 计算机网络

.net网络编程(2)网络适配器

2011-02-15 15:59 351 查看
 



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

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

一.NetworkInterface(网络适配器)

即我们平时查看网卡信息





图1





图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);
}






3.IPInterfaceProperties

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

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





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





示例:

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);
}


结果





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);
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: