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