解决方案
获取主机名
Dns 类提供了一组用于域名系统 (DNS) 操作的静态方法。
Dns.GetHostName();
我们可以使用Dns.GetHostName()方法来获取本地计算机的主机名, 这是一个静态方法。该方法调用操作系统的网络栈,以获取计算机的主机名。主机名是一个用来标识网络上的设备的名称。在网络中,每个设备都有一个唯一的主机名,通过主机名可以在网络中进行设备间的通信。
获取IP地址
Dns.GetHostAddresses(hostName);
获取到主机名后,我们使用Dns.GetHostAddresses(hostName)方法来获取IP列表,这也是一个静态方法,用于获取指定主机名(或 IP 地址字符串)对应的 IP 地址列表。它接受一个主机名或 IP 地址作为参数,并返回一个 IPAddress[] 数组,其中包含与该主机名或 IP 地址关联的所有 IP 地址。
该方法首先尝试解析参数中传入的主机名。如果传入的是一个有效的主机名,它将查询 DNS 服务器以查找与该主机名对应的 IP 地址。如果找到了相关的 IP 地址,将返回一个包含这些 IP 地址的数组。
另外,如果传入的参数是一个有效的 IP 地址字符串(例如:“192.168.0.1”),那么方法将直接将该字符串解析为一个 IPAddress 对象并放入数组中返回。
该方法在解析过程中,如果遇到了问题或访问权限的限制,会抛出异常,如 SocketException 或 SecurityException。
过滤IPv4地址
可以通过一个枚举值AddressFamily.InterNetwork来过滤IPv4地址。
AddressFamily 是一个枚举类型,定义了不同的网络地址类型。其中,InterNetwork 表示 IPv4 地址,InterNetworkV6 表示 IPv6 地址,Unix 表示 Unix 域套接字地址等。
函数
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System;
public static List<string> GetIPv4Addresses()
{
string hostName = Dns.GetHostName();
IPAddress[] addresses = Dns.GetHostAddresses(hostName);
List<string> ipv4Addresses = new List<string>();
foreach (IPAddress address in addresses)
{
// 判断是否为IPv4地址
if (address.AddressFamily == AddressFamily.InterNetwork)
{
ipv4Addresses.Add(address.ToString());
}
}
return ipv4Addresses;
}
该函数将返回找到的所有IPv4地址,调用后会得到一个包含所有找到的IPv4地址的列表。如果没找到IPv4地址,则返回一个空列表。
函数调用
打印出找到的所有IPv4地址。
函数调用如下:
List<string> ipv4Addresses = GetIPv4Addresses();
foreach (string address in ipv4Addresses)
{
Console.WriteLine(address);
}
运行结果
其他文章
有了局域网IP,我们就可以通过UDP来实现局域网通讯,参考文章C#实现局域网之间互相传递消息
安卓获取当前设备的局域网IP地址