C# 从URL获取IP地址时发生套接字错误

C# 从URL获取IP地址时发生套接字错误,c#,dns,C#,Dns,我试图从用户那里获取一个网站,并获取用户输入的任何网站的IP地址。我有一个文本框,用户可以进入任何网站。如果用户输入“www.Google.com”,则该文本将转到System.Net.Dns.GetHostAddresses(Convert.ToString(urlTextbox))

我试图从用户那里获取一个网站,并获取用户输入的任何网站的IP地址。我有一个文本框,用户可以进入任何网站。如果用户输入“www.Google.com”,则该文本将转到
System.Net.Dns.GetHostAddresses(Convert.ToString(urlTextbox))
这就是我想要的:
这是我的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
namespace Challenger
{
    public partial class Form1 : Form
    {
        int ipWidth;
        string x;
        public Form1()
        {
            InitializeComponent();
            urlTextbox.Text ="www.";  
            ipLabelText();                  
        }

        private void button2_Click(object sender, EventArgs e)
        {
            System.Net.IPAddress[] addresses =
                System.Net.Dns.GetHostAddresses(Convert.ToString(urlTextbox));
            string ipTextLength = Convert.ToString(addresses[0]);

            //Stores the amount of digits
            ipWidth = ipTextLength.Length;

            //Puts ip into a string-> Label for Display
            label2.Text = Convert.ToString(addresses[0]);
            label2.Location = new Point(80, 20);
        }

        public void ipLabelText()
        {
            label2.Parent = panel1;
            label2.BackColor = Color.Transparent;
            label2.ForeColor = Color.White;
        }
    }
}
//Porting LOIC Android Application in C#

GetHostByAddress接受ip地址并返回主机名。因此,如果您输入8.8.8.8,它将返回google dns服务器的名称。您正在寻找的方法是:

微软的例子是:

public static void DoGetHostEntry(string hostname)
{
    IPHostEntry host;   
    host = Dns.GetHostEntry(hostname);
    Console.WriteLine("GetHostEntry({0}) returns:", hostname);
    foreach (IPAddress ip in host.AddressList)
    {
        Console.WriteLine("    {0}", ip);
    }
}

调查这一点的一个好方法是,您可以在调试器中逐步查看代码,以查看实际传递给
Dns.GetHostAddresses()
方法的内容

这样做,您会看到调用
Convert.ToString(urlTextbox)
将返回一个类似“System.Windows.Controls.TextBox:www.Google.com”的字符串。正如您所看到的,这几乎不是一个有效的主机名。您收到DNS错误并不奇怪。:)


相反,请尝试
Dns.GetHostAddresses(urlTextbox.Text)

该代码不使用
GetHostByAddress
。如果OP只需要IP地址,则
GetHostAddresses
方法(正在使用)可以正常工作,至少在使用有效的主机名调用时是如此。:)