C#数据报编程之测试程序

C#数据报编程比Java要简洁一些,至少类的数量少了:System.Net.Sockets名称空间中提供了一个UDPClient类用于处理单播,广播和组播.处理方式为:

单播:RS两端指定相同端口,数据报头中包含普通IP地址和端口,即可实现.

广播:RS两端指定相同端口,数据报头中包含广播地址和端口,即可实现.

组播:RS两端指定相同端口,R端要调用JoinMulticastGroup方法加入组,数据报头中包含组播地址和端口,即可实现.

本程序结构分两层,上层定义发送的任务,下层负责传输.

上层负责处理数据分割及组装,每片固定大小,分报头和数据区.报头包括源IP,源端口,片标识,总片数,片序号,数据区实际长度,数据总长度,报类型和一些可扩展属性,这里可加入自定义控制信息(使用命令模式,对每个动作对应动作处理器,这些位于上一层了).

下层仅仅是数据交换,接收和发送分别对应一个主动类,发送和接收的任务都位于队列中.在这两个类中,向上层发送三个消息:S端的数据开始接收,数据接收结束;R端的数据抵达.在上层会产生两个消息:开始接收数据和数据接受完毕.

在两个层中起支柱作用的类是任务管理器.

下面先定义这些事件.

C#中自定义事件

C#语言中有77个关键字,其中delegateevent专门为C#中事件处理系统提供的。

delegate声明定义一种引用类型,该类型可用于将方法用特定的签名封装。委托实例封装静态方法或实例方法。委托大致类似于 C++ 中的函数指针;但是,委托是类型安全和可靠的。

event指定一个事件。在C#的类中存在以下成员:域(Fields)、属性(Properties)、方法(Methods)、索引(Indexs)、事件(Events),其中事件(Events)成员就是用来声明一个类事件的。在类中声明一个事件成员一般采用如下的语法形式:public event 委托名 事件名。

本程序是UDP通信的UI测试程序,负责接收数据报文,下面是消息定义代码,首先定义委托,然后定义事件类。

在文件Delegate.cs中定义五个委托:

namespace Communication
{

 public delegate void DgOnSendDataStart(object sender,UDPEvent e);//数据发送开始代理。
 public delegate void DgOnSendDataFinished(object sender,UDPEvent e);//数据发送完毕代理。
 public delegate void DgOnDataArrived(object sender,UDPEvent e);//数据抵达代理。
 public delegate void DgOnStartRecv(object sender,UDPEvent e);//开始接收数据代理。
 public delegate void DgOnFinishedRecv(object sender,UDPEvent e);//数据接受完毕代理。

自定义事件类:

SendEvent也位于这个文件中,包括一个消息属性和字节数组以及一个任务管理器.

 public class UDPEvent:EventArgs
 {
  string msg="";
  private byte[] recvdata=null;
  private TaskManager1 tm;

  public SendEvent(){}
  public string Msg
  {
   set
   {
    msg=value;
   }
  }
  public byte[] RecvData
  {
   set
   {
    recvdata=value;
   }
   get
   {
    return recvdata;
   }
  }
  public TaskManager1 taskManager
  {
   set
   {
    tm=value;
   }
   get
   {
    return tm;
   }
  }
 }

新事件类和五个委托定义完毕.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值