100165787.htm
来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 332 行 · 第 1/2 页
HTM
332 行
<p class=MsoNormal><span lang=EN-US>Dns</span><span style='font-family:宋体'>类能够与默认的</span><span
lang=EN-US>DNS</span><span style='font-family:宋体'>服务器进行通信,以检索</span><span
lang=EN-US>IP</span><span style='font-family:宋体'>地址。</span><span lang=EN-US>Dns</span><span
style='font-family:宋体'>类有两个重要的静态方法:</span><span lang=EN-US>Resolve()</span><span
style='font-family:宋体'>方法和</span><span lang=EN-US>GetHostByAddress()</span><span
style='font-family:宋体'>方法。通过给</span><span lang=EN-US>Resolve()</span><span
style='font-family:宋体'>方法提供主机名称,</span><span lang=EN-US>Resolve()</span><span
style='font-family:宋体'>可以使用</span><span lang=EN-US>DNS</span><span
style='font-family:宋体'>服务器获取主机的详细信息;通过给</span><span lang=EN-US>GetHostByAddress()</span><span
style='font-family:宋体'>方法提供</span><span lang=EN-US>IP</span><span
style='font-family:宋体'>地址,</span><span lang=EN-US>GetHostByAddress()</span><span
style='font-family:宋体'>也可以返回主机的详细信息。这两个方法都返回一个</span><span lang=EN-US>IPHostEntry</span><span
style='font-family:宋体'>对象。</span></p>
<p class=2 style='margin-top:8.15pt;margin-right:0cm;FTEL:0cm;
margin-left:21.45pt;FTEL:.0001pt;FTEL:18.45pt'><span
lang=EN-US>IPHostEntry wroxHost = Dns.Resolve("www.wrox.com");</span></p>
<p class=2 style='margin-top:0cm;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>IPHostEntry
wroxHostCopy = Dns.GetHostByAddress("168.215.86.81");</span></p>
<p class=MsoNormal><span style='font-family:宋体'>在这段代码中,两个</span><span
lang=EN-US>HostEntry</span><span style='font-family:宋体'>对象将包含</span><span
lang=EN-US>Wrox.com</span><span style='font-family:宋体'>服务器的详细信息。</span></p>
<p class=MsoNormal><span lang=EN-US>Dns</span><span style='font-family:宋体'>类与</span><span
lang=EN-US>IPAddress</span><span style='font-family:宋体'>类和</span><span
lang=EN-US>IPHostEntry</span><span style='font-family:宋体'>类的不同之处在于:</span><span
lang=EN-US>Dns</span><span style='font-family:宋体'>可以与服务器进行通信,以获取有关的信息;而</span><span
lang=EN-US>IPAddress</span><span style='font-family:宋体'>类和</span><span
lang=EN-US>IPHostEntry</span><span style='font-family:宋体'>类只是包含许多便利属性的简单数据结构,可以访问底层的数据。</span></p>
<h4 style='FTEL:21.45pt'><span lang=EN-US>2. DnsLookup</span><span
style='font-family:黑体'>示例</span></h4>
<p class=MsoNormal><span style='font-family:宋体'>下面通过查找</span><span lang=EN-US>DNS</span><span
style='font-family:宋体'>名称的示例,来阐明</span><span lang=EN-US>DNS</span><span
style='font-family:宋体'>和与</span><span lang=EN-US>IP</span><span
style='font-family:宋体'>相关的类。屏幕图</span><span lang=EN-US>31-7</span><span
style='font-family:宋体'>显示的是</span><span lang=EN-US>DnsLookup</span><span
style='font-family:宋体'>示例运行的情况。</span></p>
<p align=center><span lang=EN-US><img width=235 height=220
src="31/image008.jpg"></span></p>
<p align=center style='FTEL:8.15pt'><span style='font-family:宋体'>图</span><span
lang=EN-US> 31-7</span></p>
<p class=MsoNormal><span style='font-family:宋体'>该示例让用户在主文本框中键入</span><span
lang=EN-US>DNS</span><span style='font-family:宋体'>名称,然后,当用户单击</span><span
lang=EN-US>Resolve</span><span style='font-family:宋体'>按钮时,这个示例就使用</span><span
lang=EN-US>Dns.Resolve()</span><span style='font-family:宋体'>方法检索</span><span
lang=EN-US>IPHostEntry</span><span style='font-family:宋体'>引用,显示出主机名和</span><span
lang=EN-US>IP</span><span style='font-family:宋体'>地址。注意,显示出的主机名也许与键入的名称不同,如果一个</span><span
lang=EN-US>DNS</span><span style='font-family:宋体'>名称</span><span lang=EN-US>(www.microsoft.com)</span><span
style='font-family:宋体'>仅担当另一个</span><span lang=EN-US>DNS</span><span
style='font-family:宋体'>名称</span><span lang=EN-US>(a562.cd.akamai.net)</span><span
style='font-family:宋体'>的代理人,就会发生这种情况。</span></p>
<p class=MsoNormal><span lang=EN-US>DnsLookup</span><span style='font-family:
宋体'>应用程序是一个标准的</span><span lang=EN-US>C# Windows</span><span style='font-family:
宋体'>应用程序,给这个应用程序添加如图</span><span lang=EN-US>31-7</span><span style='font-family:
宋体'>中的控件,这些控件分别命名为</span><span lang=EN-US>textBoxInput</span><span
style='font-family:宋体'>、</span><span lang=EN-US>buttonResolve</span><span
style='font-family:宋体'>、</span><span lang=EN-US>textBoxHost Name</span><span
style='font-family:宋体'>和</span><span lang=EN-US>listboxIPs</span><span
style='font-family:宋体'>。然后,把下面的方法添加给</span><span lang=EN-US>Form1</span><span
style='font-family:宋体'>类,作为</span><span lang=EN-US>buttonResolve</span><span
style='font-family:宋体'>单击事件的处理程序。</span></p>
<p class=2 style='margin-top:8.15pt;margin-right:0cm;FTEL:0cm;
margin-left:21.45pt;FTEL:.0001pt;FTEL:18.45pt'><span
lang=EN-US>void btnResolve_Click (object sender, EventArgs e)</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>{</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
try</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
{</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
IPHostEntry iphost = Dns.Resolve(txtBoxInput.Text);</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
foreach (IPAddress ip in iphost.AddressList)</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
{</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
string ipaddress = ip.AddressFamily.ToString();</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
listBoxIPs.Items.Add(ipaddress);</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
listBoxIPs.Items.Add(" " + ip.ToString());</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
}</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
txtBoxHostName.Text = iphost.HostName;</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
}</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
catch(Exception ex)</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
{</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
MessageBox.Show("Unable to process the request because " +</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
"the following problem occurred:\n" + </span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
ex.Message, "Exception occurred");</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
}</span></p>
<p class=2 style='margin-top:0cm;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>}</span></p>
<p class=MsoNormal><span style='font-family:宋体'>注意,在这段代码中是如何处理异常的。如果用户键入了无效的</span><span
lang=EN-US>DNS</span><span style='font-family:宋体'>名称,或者网络处于断开状态,就会产生异常。</span></p>
<p class=MsoNormal><span style='font-family:宋体'>在检索到</span><span lang=EN-US>IPHostEntry</span><span
style='font-family:宋体'>实例之后,使用它的</span><span lang=EN-US>AddressList</span><span
style='font-family:宋体'>属性获取包含</span><span lang=EN-US>IP</span><span
style='font-family:宋体'>地址的数组,再用</span><span lang=EN-US>foreach</span><span
style='font-family:宋体'>循环遍历该数组。在每次迭代中,都使用</span><span lang=EN-US>IPAddress.AddressFamily.ToString()</span><span
style='font-family:宋体'>方法把</span><span lang=EN-US>IP</span><span
style='font-family:宋体'>地址显示为整数和字符串。</span></p>
</div>
<!-- page -->
<div class="page" style="text-align: center">
<a href="100165786.htm">上一页</a> <a href="index.html">首页</a> <a href="100165789.htm">下一页</a>
</div>
<div style="margin: 0px auto; width: 700px; border: solid 1px #0b5f98;">
<div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
图书导读
</div>
<div style="float: right; width: 670px; text-align: left; line-height: 16pt; padding-left: 2px">
<!--导读-->
<h1 id="divCurrentNode2" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165787.htm'><font color='red'>31.4.2 IP地址和DNS名称</font></a></h1>
<div id="divRealteNod2" style="padding-left: 2px">
<div style='float:left;width:49%'>·<a href='100165784.htm'>31.3 把输出结果显示为HTML页面</a></div><div style='float:right;width:49%'>·<a href='100165785.htm'>31.4 实用工具类</a></div><div style='float:left;width:49%'>·<a href='100165786.htm'>31.4.1 URI</a></div><div style='float:right;width:49%'>·<a href='100165789.htm'>31.5 较低层的协议</a></div><div style='float:left;width:49%'>·<a href='100165790.htm'>31.6 小结</a></div><div style='float:right;width:49%'>·<a href='100165791.htm'>32.1 Windows服务</a></div></div>
</div>
</div>
</div>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?