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(&quot;www.wrox.com&quot;);</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(&quot;168.215.86.81&quot;);</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>&nbsp; 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>&nbsp;&nbsp;
try</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
{</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
IPHostEntry iphost = Dns.Resolve(txtBoxInput.Text);</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
foreach (IPAddress ip in iphost.AddressList)</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
{</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
string ipaddress = ip.AddressFamily.ToString();</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
listBoxIPs.Items.Add(ipaddress);</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
listBoxIPs.Items.Add(&quot;&nbsp;&nbsp; &quot; + ip.ToString());</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
txtBoxHostName.Text = iphost.HostName;</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
}</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
catch(Exception ex)</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
{</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
MessageBox.Show(&quot;Unable to process the request because &quot; +</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&quot;the following problem occurred:\n&quot; + </span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ex.Message, &quot;Exception occurred&quot;);</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
}</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>&nbsp;&nbsp;&nbsp;<a href="index.html">首页</a>&nbsp;&nbsp;&nbsp;<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 + -
显示快捷键?