[C#]事件驱动的SOCKET类

使用事件驱动SOCKET的好处是可以封装SOCKET的收发包,由于是线程接收的包,再请求的上层的事件,所以,在主程序中要注意界面上的委托显示。

如果有使用过Delphi的人就会发现,在Delphi中的事件驱动也是使用类似的方法,叫事件挂接吧,我的同事这样和我说的。不管怎样,语言总是可以贯通的。

以下是SOCKET类的部分代码,让注释说话吧:

在主程序中,只要申明,并指向一下事件,就可以让SOCKET包处理变得非常的简单:

  

把包接收事件都写在client_RecEvent中,e.DataPack就是接收的包。

把SOCKET事件,比如,断开重连,包异常等事件处理都写在client_SocketEvent中

 

小结

服务端的接收和转发也是类似的做法,只是申明的事件要多一些,这里就不赘述了。

在本例子中SOCKET类中由Thread_Read方法接收的包,处理的包是带有5个字节的包头的格式,不同的情况需要进行不同的接收处理,在接收过程中,还是可以获得许多异常事件,可以捕获SocketException,根据NativeErrorCode值进行有选择性的捕获,并提交上层事件,这里需要注意的是,有时候需要继续捕获其他异常,因为SocketException是不会捕获所有异常的。

 

补充

在实际运行中,本文的代码出现了一些问题,在后续的文章中,我将对这些问题进行修改:http://blog.csdn.net/much0726/archive/2009/08/22/4471830.aspx,本篇文章在我的思想挣扎下,还是没有删除掉,算是一个学习的过程吧。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值