使用 Dns.GetHostEntry 构建 IPAddress 变量
Constructing an IPAddress variable using Dns.GetHostEntry
我的应用程序正在使用简单的 IPv4
地址向网络上的另一个应用程序(维护报告数据库)发送报告。我可以通过两种方式构建有效的 IPAddress
:
string address = "200.1.2.41";
IPAddress ip1 = IPAddress.Parse(address);
IPAddress ip2 = (Dns.GetHostEntry(address)).AddressList[0];
如果 address
表示可访问的 IP,则两种方法都很快(尽管 IPAddress.Parse
是最快的)。但是,如果 address
无法访问(例如,服务器已关闭或用户在设置中输入了错误的 IP),那么 Parse 会快如闪电...但是 Dns.GetHostEntry
最多会挂起 9 秒。
我逐个参数检查,最终变量 ip1
和 ip2
相同。鉴于 Parse 总是很快,而且我只使用标准的四字节 IPv4
地址,是否有任何令人信服的理由使用 Dns.GetHostEntry
方法?如果我将来切换到 IPv6
或命名为 FOOD.HALL.01
的主机,我可能需要 Dns.GetHostEntry
吗?
如果您只想为您的 IP 地址字符串表示获取 IPAddress
的实例,那么使用 DNS 绝对是矫枉过正。
各种超时、延迟等都是绝对预期的。至少与 IPAddress.Parse()
中发生的字符串表示的纯本地解析和剖析相比。它所做的是,要求 DNS 服务器将 IP 地址字符串解析为主机名 "entry"。从那里你会得到你一直知道的 IP 地址(尽管是 string
而不是 IPAddress
)。
现在,如果您希望将来能够 "convert" 将主机名转换为 IP 地址,那么是的,您需要通过 DNS。
但你总是可以用那种方式(概念上)来做:
// First see if it is a valid IP address rep - fast.
IPAddress ip;
if (!IPAddress.TryParse(address, out ip))
{
// See if it is a hostname - slower.
ip = Dns.GetHostEntry(address).AddressList[0];
}
是的,IPAddress.TryParse()
(或Parse()
)可以处理 IPv4 和 IPv6 地址。
我的应用程序正在使用简单的 IPv4
地址向网络上的另一个应用程序(维护报告数据库)发送报告。我可以通过两种方式构建有效的 IPAddress
:
string address = "200.1.2.41";
IPAddress ip1 = IPAddress.Parse(address);
IPAddress ip2 = (Dns.GetHostEntry(address)).AddressList[0];
如果 address
表示可访问的 IP,则两种方法都很快(尽管 IPAddress.Parse
是最快的)。但是,如果 address
无法访问(例如,服务器已关闭或用户在设置中输入了错误的 IP),那么 Parse 会快如闪电...但是 Dns.GetHostEntry
最多会挂起 9 秒。
我逐个参数检查,最终变量 ip1
和 ip2
相同。鉴于 Parse 总是很快,而且我只使用标准的四字节 IPv4
地址,是否有任何令人信服的理由使用 Dns.GetHostEntry
方法?如果我将来切换到 IPv6
或命名为 FOOD.HALL.01
的主机,我可能需要 Dns.GetHostEntry
吗?
如果您只想为您的 IP 地址字符串表示获取 IPAddress
的实例,那么使用 DNS 绝对是矫枉过正。
各种超时、延迟等都是绝对预期的。至少与 IPAddress.Parse()
中发生的字符串表示的纯本地解析和剖析相比。它所做的是,要求 DNS 服务器将 IP 地址字符串解析为主机名 "entry"。从那里你会得到你一直知道的 IP 地址(尽管是 string
而不是 IPAddress
)。
现在,如果您希望将来能够 "convert" 将主机名转换为 IP 地址,那么是的,您需要通过 DNS。
但你总是可以用那种方式(概念上)来做:
// First see if it is a valid IP address rep - fast.
IPAddress ip;
if (!IPAddress.TryParse(address, out ip))
{
// See if it is a hostname - slower.
ip = Dns.GetHostEntry(address).AddressList[0];
}
是的,IPAddress.TryParse()
(或Parse()
)可以处理 IPv4 和 IPv6 地址。