- UID
- 1029342
- 性别
- 男
|
三.简介VisualC#实现Ping命令使用的类:
Visual C#实现Ping命令中涉及到很多的类,其中最重要的是Socket类。这是因为程序中发送含有ICMP报文的IP数据包,接收含有ICMP超时或ICMP会显报文的IP数据包和设定IP数据包中的TTL数值都会使用到Socket类。表01和表02是Socket类中的常用属性和方法及其简要说明。
属性 | 说明 | AddressFamily | 获取Socket的地址族。 | Available | 获取已经从网络接收且可供读取的数据量。 | Blocking | 获取或设置一个值,该值指示Socket是否处于阻塞模式。 | Connected | 获取一个值,该值指示Socket是否已连接到远程资源。 | Handle | 获取Socket的操作系统句柄。 | LocalEndPoint | 获取本地终结点。 | ProtocolType | 获取Socket的协议类型。 | RemoteEndPoint | 获取远程终结点。 | SocketType | 获取Socket的类型。 | 表01:Socket类的常用属性及其说明
方法 | 说明 | Accept | 创建新的Socket以处理传入的连接请求。 | BeginAccept | 开始一个异步请求,以创建新的Socket来接受传入的连接请求。 | BeginConnect | 开始对网络设备连接的异步请求。 | BeginReceive | 开始从连接的Socket中异步接收数据。 | BeginReceiveFrom | 开始从指定网络设备中异步接收数据。 | BeginSend | 将数据异步发送到连接的 | BeginSendTo | 向特定远程主机异步发送数据。 | Bind | 使Socket与一个本地终结点相关联。 | Close | 强制Socket连接关闭。 | Connect | 建立到远程设备的连接。 | EndAccept | 结束异步请求以创建新的Socket来接受传入的连接请求。 | EndConnect | 结束挂起的异步连接请求。 | EndReceive | 结束挂起的异步读取。 | EndReceiveFrom | 结束挂起的、从特定终结点进行异步读取。 | EndSend | 结束挂起的异步发送。 | EndSendTo | 结束挂起的、向指定位置进行的异步发送。 | GetSocketOption | 返回Socket选项的值。 | IOControl | 为Socket设置低级别操作模式。 | Listen | 将Socket置于侦听状态。 | Poll | 确定Socket的状态。 | Receive | 接收来自连接Socket的数据。 | ReceiveFrom | 接收数据文报并存储源终结点。 | Select | 确定一个或多个套接字的状态。 | Send | 将数据发送到连接的 | SendTo | 将数据发送到特定终结点。 | SetSocketOption | 设置Socket选项。 | Shutdown | 禁用某Socket上的发送和接收。 | 表02:Socket类的常用方法及其说明
其中包含六组异步方法,它们是:
·BeginAccept和EndAccept
·BeginConnect和EndConnect
·BeginReceive和EndReceive
·BeginReceiveFrom和EndReceiveFrom"
·BeginSend和EndSend
·BeginSendTo"和"EndSendTo
其功能分别相当于"Accept"、"Connect"、"Receive"、"ReceiveFrom"、"Send"和"SendTo"方法。
四.Visual C#实现Ping命令的关键步骤及其解决方法
根据Ping命令的执行过程,可以把Ping命令分成三个主要的步骤:
1. 定义ICMP报文。
2. 客户机发送封装ICMP回显请求报文的IP数据包。
3. 客户机接收封装ICMP应答报文的IP数据包。
解决了上述三个步骤,Visual C#实现Ping命令就基本可以完成了。下面是这三个步骤的具体的解决方法。
1. 定义ICMP报文:
根据图05所示的ICMP报文组成结构,定义了一个类--IcmpPacket类。IcmpPacket类通过实例化就能够得到ICMP报文。下面代码是定义IcmpPacket类: |
|