.net网络编程(2)网络适配器
2011-02-15 15:59 Clingingboy 阅读(1211) 评论(0) 编辑 收藏 举报
转
.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);
}
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2007-02-15 新装了vista,不容易啊