.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);
}
}
}
}
相关文章推荐
- .Net网络通讯编程[利用Socket实现字串、文件、序列化对象传输]--使用封装的网络服务1
- .Net网络编程——使用TcpClient与TcpListener建立客户端与服务端连接
- .Net网络通讯编程[利用Socket实现字串、文件、序列化对象传输]--使用封装的网络服务2
- .Net网络编程——使用TcpClient与TcpListener建立客户端与服务端连接
- 黑马程序员---.NET高级之网络套接字(Socket)编程
- .Net网络通讯编程[利用Socket实现字串、文件、序列化对象传输]--使用封装的网络服务3[聊天室]
- 实战IM(即时通讯系统)开发——剖析.NET网络通信、音频、移动平台IM及服务器端编程
- .NET技术之美-网络编程
- .Net网络编程——服务端获取客户端连接
- .Net网络通讯编程[利用Socket实现字串、文件、序列化对象传输]--使用封装的网络服务4[聊天室]
- .net网络编程(3)Socket基础
- c#.Net经典面试题目(6)_.Net编程_网络编程
- .NET(C#)基于Socket编程实现平行主机之间网络通讯有图片传输的Demo演示
- .Net网络编程——服务端获取客户端连接
- .NET高效网络编程——提纲和Mindmap
- [C#] .net网络编程之一:Socket编程
- .net网络编程之一:Socket编程
- .Net网络通讯编程[利用Socket实现字串、文件、序列化对象传输]--类设计1[使用IE浏览本页]
- .net网络编程之一:Socket编程
- .net网络编程之一:Socket编程