
2.3 C#.NET网络程序开发基本类
C#.NET的命名空间System.Net为Internet上使用的多种协议提供了便利的编程接口。开发人员利用这个命名空间提供的类编写符合标准网络协议的网络应用程序时,不需要考虑所用协议的具体细节,就能很快实现所需功能。
2.3.1 IPAddress类
IPAddress类提供了主机的IP地址及相关信息,包括IP回环地址Loopback、IP广播地址Broadcast以及对IPv6协议的支持。
IPAddress类的默认构造函数如下:
public IPAddress(long address)
这个构造函数的参数取一个长值,并把它转换成IP地址。
表2-1列举了IPAddress类的常用公共方法。
表2-1 IPAddress类的常用公共方法

注:*IP地址标准表示法对于IPv4使用点分十进制表示,对于IPv6使用冒号十六进制表示。
上面方法中常用Parse()方法创建IPAddress实例,语法如下:
public static IPAddress Parse(string ipString)
而将IP地址转换成标准表示法的ToString()方法的语法如下:
public override string ToString()
2.3.2 IPHostEntry类
IPHostEntry类将域名系统(DNS)主机名和别名与匹配的IP地址关联。它提供主机的IP地址(借助IPAddress类)、主机名及别名,其主要公共属性如表2-2所示。
表2-2 IPHostEntry类的属性

2.3.3 IPEndPoint类
IPEndPoint类将网络端点表示为IP地址和端口号,其对象表示指定IP地址和端口号的组合,进而形成到主机的连接点。有两个构造函数:
public IPEndPoint(long IPAddress,int port); public IPEndPoint(IPAddress address,int port);
这个类包含3个属性,如表2-3所示。
表2-3 IPEndPoint类属性

2.3.4 Dns类
Dns类是一个静态类,提供一系列静态方法来获取本地或远程域名,最常用的有以下几种。
(1)GetHostName():获取本地系统的主机名。用法如下:
string hostname=DNS.GetHostName();
(2)GetHostByName():获取指定DNS主机名的主机信息。用法如下:
IPHostEntry ipHost=GetHostByName("www.cqut.edu.cn");
(3)GetHostByAddress():通过IP地址获取指定主机名的主机信息。用法如下:
IPHostEntry GetHostByAddress(IPAddress address); IPHostEntry GetHostByAddress(string address);
(4)Resole():接收主机格式或IP地址格式的任一种地址格式,返回IPHostEntry对象的DNS信息。
【例2-1】 编程实现获取并显示本机的IP地址、主机名信息。演示IPEndPoint类的方法及属性使用。

程序运行结果如图2-9所示。

图2-9 IPandPorts程序运行结果
2.3.5 Ping及相关类
Windows操作系统提供了Ping.exe的命令行程序,大家经常用它来测试网络连接情况,以及确定本地主机能否与远程主机收发数据。与此对应,C#的命名空间System.Net.NetworkInformation提供了与Ping有关的Ping、PingOptions和PingReply类。
Ping类可以检测远程计算机,它通过向目标主机发送一个回送请求数据包,要求目标主机收到请求后答复,从而判断网络响应时间和本机与目标主机是否连通。Ping类提供同步和异步两种方式发送数据,提供的Send()方法以同步方式向目标发送请求,并返回一个PingReply实例;若是异步,则使用SendAsync方法。具体使用方法见MSDN文档。
PingOptions类提供Ttl和DontFragment属性控制Ping数据包的传输。Ttl属性为Ping数据包指定生存时间,表示在丢弃Ping数据包前可以转发此数据包的路由节点数,默认值为128。DontFragment属性控制Ping类数据包是否分片,如果为true则不能分片。不能分片的情况下如果发送数据包超过MTU,则发送失败。
Ping类的Send方法将返回一个PingReply类对象,用于获得目的主机及其网络信息。PingReply类的常用属性如表2-4所示。
表2-4 PingReply类常用属性

【例2-2】 编程实现用Ping、PingOptions和PingReply类测试目标主机是否可以到达。

程序运行结果如图2-10所示。

图2-10 PingHost程序运行结果