C# 从URL获取IP地址时发生套接字错误
我试图从用户那里获取一个网站,并获取用户输入的任何网站的IP地址。我有一个文本框,用户可以进入任何网站。如果用户输入“www.Google.com”,则该文本将转到C# 从URL获取IP地址时发生套接字错误,c#,dns,C#,Dns,我试图从用户那里获取一个网站,并获取用户输入的任何网站的IP地址。我有一个文本框,用户可以进入任何网站。如果用户输入“www.Google.com”,则该文本将转到System.Net.Dns.GetHostAddresses(Convert.ToString(urlTextbox))
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
方法(正在使用)可以正常工作,至少在使用有效的主机名调用时是如此。:)