从URL获取IP地址时出现套接字错误

时间:2014-11-02 18:38:57

标签: c# dns

我正在尝试从用户那里获取一个网站,并获取用户输入的任何网站的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#

2 个答案:

答案 0 :(得分:0)

GetHostByAddress获取IP地址并返回主机名。因此,如果您输入8.8.8.8,它将返回谷歌DNS服务器的名称。您要查找的方法是:getHostEntry

microsoft的例子是:

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);
    }
}

答案 1 :(得分:0)

调查此问题的一个好方法是让您逐步完成代码,以便在调试器中查看您实际上传递给Dns.GetHostAddresses()方法的内容。

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

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