Board logo

标题: 利用Visual C#实现ICMP网络协议(2) [打印本页]

作者: yuyang911220    时间: 2015-11-23 22:09     标题: 利用Visual C#实现ICMP网络协议(2)

三.简介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类:




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0