对CSocket类使用的理解

今天看了本书上的例程,做的是局域网聊天工具,用的Socket知识。前面介绍了Socket相关的函数,这些之前都了解。不过真正实现的时候却是用了封装的CSocket类,然后绕来绕去感觉一头雾水,花了好长时间研究了它的代码。

首先它的主类继承自CSocket类,然后注意到重载了三个函数:

virtual void OnReceive(); //接收到数据

virtual void OnClose(); //关闭

virtual void OnAccept(); //接收新用户

然后在这三个重载的函数的实现是分别发送SOCKET_EVENT消息给窗口:

pWnd -> SendMessage(SOCKET_EVENT,(long)this,RETR/CLOSE/ACCEPT);

接着,程序定义了消息SOCKET_EVENT,并定义了消息映射:

ON_MESSAGE(SOCKET_EVENT,OnSocket)

最后添加OnSocket函数进行消息处理。处理中对消息的lParam进行switch-case判断处理。

那么现在,我的理解是:那三个重载的函数,应该是CSocket类中封装好的,自己创建了线程在里面,例如一旦缓冲区接收到消息,它就会自动调用OnReceive函数,启动接收的线程,原理应该和串口控件MSComm一样的。重载之后,一旦自动调用,会发不同参数的消息给窗口,最后窗口对消息进行判断处理。而对于Send功能怎没有对应的线程,而是定义个按钮作为启动事件。一般都是把Send作为主动功能,而Receive作为线程。

另外,程序使用了CS架构编写,和我之前看的P2P不一样,主要是服务器端是负责转发的功能,因此会先Receive读取数据,再Send转发数据。转发还分群发和私聊。而客户端这边Receive和Send是分开的,都是和服务器发生关系。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值