IPAddress类的使用

本文介绍了C#.NET中的IPAddress类使用方法,包括如何通过Parse方法解析IP地址字符串,以及如何利用预定义的静态成员如Loopback、Broadcast、Any和None等。同时展示了如何获取本地IP地址并进行简单的比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C# .NET中得IPAddress类
例子如下:
using System;
using System.Net;


class AddressSample
{
    public static void Main()
    {
    IPAddress test1 = IPAddress.Parse("192.168.1.1");//192.168.1.1
    IPAddress test2 = IPAddress.Loopback;//127.0.0.1
    IPAddress test3 = IPAddress.Broadcast;//255.255.255.255
    IPAddress test4 = IPAddress.Any;//0.0.0.0
    IPAddress test5 = IPAddress.None;//255.255.255.255

    IPHostEntry ihe = Dns.GetHostByName(Dns.GetHostName());
    IPAddress myself = ihe.AddressList[0];//202.115.203.199

    if (IPAddress.IsLoopback(test2))
        Console.WriteLine("The Loopback address is: {0}", test2.ToString());
    else
        Console.WriteLine("Error obtaining the loopback address");

    Console.WriteLine("The Local IP address is: {0}/n", myself.ToString());

    if (myself == test2)
        Console.WriteLine("The loopback address is the same as local address./n");
    else
        Console.WriteLine("The loopback address is not the local address./n");

    Console.WriteLine("The test address is: {0}", test1.ToString());
    Console.WriteLine("Broadcast address: {0}", test3.ToString());
    Console.WriteLine("The ANY address is: {0}", test4.ToString());
    Console.WriteLine("The NONE address is: {0}", test5.ToString());
    }
}

好了,现在 来将一下里面用得几个方法:
1、IPAddress.Parse(),方法,在MSDN中这样解释它:
   public static IPAddress Parse (string ipString),这个方法得目的就是将一个ipString转换成为IPAddress类型。
   这个方法很简单就可以理解了!
2、IPAddress.Loopback、IPAddress.Broadcast、IPAddress.Any、IPAddress.None都是IPAddress得几个域成员,它们得返回值类型都是IPAddress。

a、IPAddress.Loopback Provides the IP loopback address.
   This field is read-only.The Loopback field is equivalent to 127.0.0.1 in dotted-quad notation.
  
b、IPAddress.Broadcast Provides the IP broadcast address. This field is read-only.
   The Broadcast field is equivalent to 255.255.255.255 in dotted-quad notation.
c、IPAddress.Any Provides an IP address that indicates that the server must listen for client activity on all network interfaces. This field is    read-only.
   The Socket.Bind method uses the Any field to indicate that a Socket instance must listen for client activity on all network interfaces.
d、IPAddress.None  Provides an IP address that indicates that no network interface should be used. This field is read-only.
   The Socket.Bind method uses the None field to indicate that a Socket must not listen for client activity. The None field is equivalent to      

255.255.255.255 in dotted-quad notation.
 
### .NET 中 `IPAddress` 使用方法 #### 创建和解析 IP 地址 为了创建或验证一个 IP 地址字符串的有效性,可以利用 `IPAddress.TryParse` 方法。此静态方法尝试将给定的字符串转换成有效的 IP 地址对象,并返回操作成功与否的结果。 ```csharp using System; using System.Net; // 尝试解析IP地址并打印出来 IPAddress ipAddress; bool isValid = IPAddress.TryParse("192.168.1.1", out ipAddress); Console.WriteLine(isValid ? ipAddress.ToString() : "Invalid IP Address"); ``` 上述代码展示了如何通过提供可能代表有效 IP 的字符串来实例化一个新的 `IPAddress` 对象[^1]。 #### 获取主机对应的多个 IP 地址 当需要查询特定域名对应的所有 IP 地址时,可以通过调用 `Dns.GetHostAddresses` 函数实现这一目的。该函数接收一个表示目标主机名称的参数,并返回一组与此主机关联的不同型的 IP 地址列表。 ```csharp using System; using System.Net; public class HostInfoFetcher { public static void FetchAndDisplayIp(string hostNameOrAddress){ try{ // 清除先前的信息展示区域 Console.Clear(); // 查询指定主机的所有IP地址记录 IPAddress[] addresses = Dns.GetHostAddresses(hostNameOrAddress); foreach(var addr in addresses){ Console.WriteLine($"网际协议版本:{addr.AddressFamily}\n实际地址:{addr}"); } }catch(Exception ex){ Console.Error.WriteLine(ex.Message); } } } ``` 这段示例说明了怎样枚举某个已知主机名所映射到的具体 IP 地址集合及其属性[^2]。 #### 处理 JSON 序列化中的异常情况 值得注意的是,在某些情况下直接序列化 `IPAddress` 实例可能会引发错误,特别是在涉及到 IPv4 和 IPv6 特有字段的时候。为了避免这些问题的发生,建议开发者们自定义序列化的逻辑或者采用第三方库提供的解决方案来进行更安全的数据交换过程[^3]。 #### 显示本地机器信息 对于想要获取当前计算机上的网络配置详情的应用程序来说,还可以借助于其他辅助如 `Dns.GetHostName()` 来取得设备的名字以及进一步检索其公网/私网接口下的所有可用 IP 地址。 ```csharp using System; using System.Linq; using System.Net; static class LocalMachineDetails { public static void ShowLocalNetworkInformation(){ var localHostname=Dns.GetHostName(); Console.WriteLine($"\n本机名称:{localHostname}"); var allLocalIps=(from netInterface in NetworkInterface.GetAllNetworkInterfaces() where netInterface.OperationalStatus==OperationalStatus.Up && !netInterface.Description.Contains("Virtual") && !netInterface.Name.Contains("Loopback") select new { Interface=netInterface, Ips=netInterface.GetIPProperties().UnicastAddresses.Select(a=>a.Address)}) .ToList(); foreach(var ni in allLocalIps){ Console.WriteLine($"{ni.Interface.Name} 接口下:"); foreach(IPAddress ipAddr in ni.Ips){ Console.WriteLine($"\t-{ipAddr}"); } } } } ``` 这里给出了一种方式用于列举出运行环境所在物理硬件上所有的非虚拟、活动状态的网络适配器连同它们各自的唯一标识符(即 IP 地址)[^4].
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值