C# NetWork Programming里面一个例子,通过异步的方式解析域名。主要是应用Dns类的BeginResolve(),和EndResolve()方法。此例子有一个问题就是当碰到解析不出来的域名时,不会调用AsyncCallback指定的函数。我加了几句代码,设定2秒钟超时时间,超时的话,显示超时。现在的问题是,超时后并没有结束域名的解析。超过2秒钟解析出的域名还会显示到listBox中。而超时后想调用Dns.EndResolve()结束解析的话会抛出异常。
有待研究。
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Net;
using System.Threading;
namespace NetWork
{
public class DnsResolver : System.Windows.Forms.Form
{
private System.Windows.Forms.Button btnResolve;
private System.Windows.Forms.Button btnClear;
private System.Windows.Forms.Button btnAbout;
private System.Windows.Forms.ListBox lbResults;
private System.Windows.Forms.TextBox txtHost;
private System.ComponentModel.Container components = null;
public DnsResolver()
{
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.btnResolve = new System.Windows.Forms.Button();
this.txtHost = new System.Windows.Forms.TextBox();
this.lbResults = new System.Windows.Forms.ListBox();
this.btnClear = new System.Windows.Forms.Button();
this.btnAbout = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// btnResolve
//
this.btnResolve.Location = new System.Drawing.Point(24, 64);
this.btnResolve.Name = "btnResolve";
this.btnResolve.TabIndex = 0;
this.btnResolve.Text = "&Resolve";
this.btnResolve.Click += new System.EventHandler(this.btnResolve_Click);
//
// txtHost
//
this.txtHost.Location = new System.Drawing.Point(8, 24);
this.txtHost.Name = "txtHost";
this.txtHost.Size = new System.Drawing.Size(160, 21);
this.txtHost.TabIndex = 1;
this.txtHost.Text = "";
//
// lbResults
//
this.lbResults.ItemHeight = 12;
this.lbResults.Location = new System.Drawing.Point(176, 8);
this.lbResults.Name = "lbResults";
this.lbResults.Size = new System.Drawing.Size(296, 232);
this.lbResults.TabIndex = 2;
//
// btnClear
//
this.btnClear.Location = new System.Drawing.Point(24, 112);
this.btnClear.Name = "btnClear";
this.btnClear.TabIndex = 3;
this.btnClear.Text = "&Clear";
this.btnClear.Click += new System.EventHandler(this.btnClear_Click);
//
// btnAbout
//
this.btnAbout.Location = new System.Drawing.Point(24, 160);
this.btnAbout.Name = "btnAbout";
this.btnAbout.TabIndex = 4;
this.btnAbout.Text = "&About...";
this.btnAbout.Click += new System.EventHandler(this.btnAbout_Click);
//
// DnsResolver
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(504, 253);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.btnAbout,
this.btnClear,
this.lbResults,
this.txtHost,
this.btnResolve});
this.Name = "DnsResolver";
this.Text = "Dns Resolver";
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new DnsResolver());
}
void DnsResolved(IAsyncResult ar)
{
IPHostEntry entry=Dns.EndResolve(ar);
foreach(IPAddress ip in entry.AddressList)
{
lbResults.Items.Add("address: "+ip.ToString());
}
foreach(string alias in entry.Aliases)
{
lbResults.Items.Add("alias: "+alias.ToString());
}
lbResults.Items.Add("resolve done.");
}
private void btnResolve_Click(object sender, System.EventArgs e)
{
if( txtHost.Text=="" ) return;
lbResults.Items.Add("resolve beginning...");
IAsyncResult ar=Dns.BeginResolve(txtHost.Text,new AsyncCallback(DnsResolved),null);
if (!ar.AsyncWaitHandle.WaitOne(2000,false))
{
lbResults.Items.Add("two seconds elapsed, failed");
}
}
private void btnClear_Click(object sender, System.EventArgs e)
{
lbResults.Items.Clear();
}
private void btnAbout_Click(object sender, System.EventArgs e)
{
string str="a tool to get the addresses & aliases of a host\n"
+"by xuhx\n"
+"email:xuhx20@hotmail.com/xuhx2012@sina.com";
MessageBox.Show(str,this.Text,MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
}查看 http://www.qqread.com/dotnet/d240592.html进入讨论组讨论。
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- VB.NET 入门教程 (22167次浏览)
- asp.net 实现购物车详细代码 (14312次浏览)
- C#版的网站新闻发布系统 (690次浏览)
- ASP.NET2.0轻松搞定统计图表 (651次浏览)
- 使用ASP.NET AJAX实现幻灯片效果 (604次浏览)
- ASP.NET如何存取 SQLServer数据库图片 (592次浏览)
- 如何制作Asp.Net界面模板 (582次浏览)
- ASP.NET中实现DataGrid数据排序 (580次浏览)
- VB.NET读写文本文件方法 (579次浏览)
- VC#初学入门:第一个Windows程序 (536次浏览)



