用CAsyncSocket类实现TCP UDP的模型

来源:互联网 发布:重庆淘宝大学学校 编辑:程序博客网 时间:2024/05/29 17:28

用CAsyncSocket类实现TCP UDP的模型
网络上一般介绍的都是如何用api函数实现TCP UDP的模型。这些模型虽然效率高,但是明显破坏了oo设计的初衷,本人经过实践,总结别人的经验,用CAsyncSocket实现了TCP UDP的通讯模型,该模型结构清晰,容易扩展,使用方便,很值得借鉴。在以前的ACE库使用中,我记得也用了这样的模型,在使用中的效果非常好,有机会,我会把ACE库的这种模式总结出来,另,不知道这种模式在设计模式中叫什么,有懂行的朋友给说一下

TCP模型
实现服务器需要两个派生自CAsyncSocket类的子类,一个用于Accept,一个用于Process。具体实现如下
CListenSocket继承CAsyncSocket,重载OnAccpet,在OnAccept中Accept(*processSocket),然后在CprocessSocket中处理就可以了
CProcessSocket继承CAsyncSocket,重载OnSend OnReceive OnClose,通过AsyncSelect来切换读写的操作,在OnClose中记得delete本身就好了(这个是因为在accept中是new来的,不然回内存泄露)

实现客户端比较简单,只需要一个继承自CAsyncSocket的类,我们假设叫CConnectSocket,需要重载OnConnect  OnSend OnReceive OnClose. OnConnect主要是为了受到接通时的事件,注意处理errorcode,其他跟服务器类似

使用时,服务器用Create 并listen就可以使用了,客户端Create 然后Connect就进入使用循环,很简单吧?

UDP模型
UDP模型比TCP要简单的多,不分服务器端跟客户端。也可以称为是对等的,都使用相同的派生于CAsyncSocket的类,这里假设为CupdSocket,重载OnReceive,
使用时,直接创建Create,然后用SendTo发送数据,接受数据都在OnReceive中,不需要AsyncSelect来切换,非常简单。

以上并不是新方法,只不过能更清晰地让你组织你的工程,非常方便的一个东西,希望能对你有用。 

原创粉丝点击