因此,用一个主机名为已死网站调用Dns.GetHostAddresses通常会引发异常,指出“未知此类主机”。
用例中的异常会导致大量额外的CPU使用,而这些额外的CPU使用可能是致命的。
是否有一种方法可以覆盖该方法以仅返回null或其他内容?
该异常是一个SocketException,指示它使用了套接字,我在Reference Source中查看,但在DNS.GetHostAddresses(string)中未找到任何套接字引用。我确实看到正在创建一个SocketException对象,但是没有使用它。
答案 0 :(得分:0)
我不确定我是否正确理解了您的问题,但是您是否正在尝试实现类似的目标?
private void button1_Click(object sender, EventArgs e)
{
try
{
IPHostEntry hostEntry;
hostEntry = Dns.GetHostEntry(textBox3.Text);
if (hostEntry.AddressList.Length > 0)
{
var ip = hostEntry.AddressList[0];
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
s.Connect(ip, 80);
textBox5.Text = ip.ToString();
}
}
catch
{
textBox5.Text = "No Conversion available";
}
答案 1 :(得分:0)
使用P / Invoke访问Win32 DNS API。从这里开始:https://www.pinvoke.net/default.aspx/dnsapi.DnsQuery
答案 2 :(得分:0)
尝试使用Dns.BeginGetHostAddresses() undefined
回调。
如果Host项不可解析(这是大多数IAsyncResult
方法的工作方式,无论是否喜欢),但在UI线程中均未引发,则无法避免该异常。
我不确定是否可以解决此问题,但我没有注意到运行它时是否有CPU峰值(只是第一次使用,但是该方法是通过System.Net
click事件调用的) )。
Button