C# IPAddress

699320fdc011de6062118d10fc3035c6.png

IPAddress 类代表 IP 地址。使用 GetAddressBytes 属性可以把地址本身作为字节数组,并使用 ToString() 方法转换为用小数点隔开的十进制格式。此外,IPAddress 类也实现静态的 Parse() 和 TryParse 方法,这两个方法的作用与 ToString() 方法正好相反,把小数点隔开的十进制字符串转换为 IPAddress。代码示例也访问 AddressFamily 属性,并将一个 IPv4 地址转换成 IPv6,反之亦然:

public static void IPAddressSample(string ipAddressString)
{
  IPAddress address;
  if (!IPAddress.TryParse(ipAddressString, out address))
  {
    Console.WriteLine($"cannot parse {ipAddressString}"); 
    return;
  }
  byte[] bytes = address.GetAddressBytes(); 
  for (int i = 0; i < bytes.Length; i++)
  {
    Console.WriteLine($"byte {i}: {bytes[i]:X}");
  }
  Console.WriteLine($"family: {address.AddressFamily}, " +
    $"map to ipv6: {address.MapToIPv6()}, map to ipv4: {address.MapToIPv4()}");
  //...

f8c2f5a0ca2876b4bed3be21c61ab2ac.png

给方法传递地址 65.52.128.33,输出结果如下:

byte 0: 41 

byte 1: 34 

byte 2: 80 

byte 3: 21

family: InterNetwork, map to ipv6: ::ffff:65.52.128.33, map to ipv4: 65.52.128.33

e76da386fa1a9cd4f2a54b8016342963.png

IPAddress 类也定义了静态属性,来创建特殊的地址,如 loopback、broadcast和anycast:

public static void IPAddressSample(string ipAddressString)
{
  //...
  Console.WriteLine($"IPv4 loopback address: {IPAddress.Loopback}");
  Console.WriteLine($"IPv6 loopback address: {IPAddress.IPv6Loopback}"); 
  Console.WriteLine($"IPv4 broadcast address: {IPAddress.Broadcast}"); 
  Console.WriteLine($"IPv4 any address: {IPAddress.Any}");
  Console.WriteLine($"IPv6 any address: {IPAddress.IPv6Any}");
}

ef69c8e36eb64afcc5066069fc842bb9.png

通过 loopback 地址,可以绕过网络硬件。这个 IP 地址代表主机名 localhost。

af282e84ac54cc69c6084c9fd805fe86.png

每个 broadcast 地址都在本地网络中寻址每个节点。这类地址不能用于 IPv6,因为这个概念不用于互联网协议的更新版本。最初定义 IPv4 后,给 IPv6 添加了多播。通过多播,寻址一组节点,而不是所有节点。在 IPv6 中,多播完全取代广播。

6916e8c8207227040ed10469abb7e8f8.png

通过 anycast,也使用一对多路由,但数据流只传送到网络上最近的节点。这对负载平衡很有用。对于 IPv4, Border Gateway Protocol(BGP) 路由协议用来发现网络中的最短路径:对于 IPv6,这个功能是内置的。

运行应用程序时,可以看到下面的 IPv4 和 IPv6 地址:

IPv4 loopback address: 127.0.0.1 

IPv6 loopback address: ::1

IPv4 broadcast address: 255.255.255.255 

IPv4 any address: 0.0.0.0

IPv6 any address: ::

ad6b89b52aae5c8d1c93dec12b1888db.png

d10ee14d681ec02055311aaf6d8240ae.png

 微信公众号 

DotNet讲堂

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值