基于CS模式的聊天室(1)

说起网络编程,大部分人使用的都是 winsocket,我觉得这样不利于初学者来学习,对于初学者来说,应该先学会使用更加方便的socket对象。那么封装了winsocket的有两个MFC类:CSocketCAsyncSocket。我建议从CAsyncSocket开始学起。

  CAsyncSocket,顾名思义,就是异步套接字。如果想做服务端,Listen和Accept 这两个函数是必不可少的。先简单来讲解常用函数的意义:

Accept:表示接收一个客户端连接

Socket:表示初始化一个套接字句柄,默认的参数是使用tcp协议

Bind绑定到本地一个端口,用来监听

Create: 实际上就是内部调用Socket和Bind函数,也就是说使用了Create不能再同时使用Socket和Bind

Connect:连接,用于客户端

Close: 关闭套接字

Listen: 监听端口,用于服务器

Receive: 接收数据,用于tcp协议

ReceiveFrom:接收数据,用于udp协议

Send:发送数据,用于tcp协议

SendTo:发送数据,用于udp协议

ShutDown: 停止本次的数据接收

回调函数:

OnAccept:每当有连接请求时,此函数被调用

OnClose: 每当有连接被关闭时,此函数被调用,nErrorCode为0表示正常关闭,其他为非正常关闭

OnConnect:每当使用了Connect函数时,此函数被调用,nErrorCode为0,表示连接成功,其他表示连接失败

OnReceive: 每当有数据接收,此函数被调用

OnSend: 每当Send函数调用完后,此函数被调用



下面我来讲解服务器的一般流程:

1.加载套接字版本

2.使用协议和绑定端口

3.监听端口

4.接受连接


首先我们来定义一个 CAsyncSocket 全局对象。

CAsyncSocket m_server;

然后在初始化对话框的时候加载套接字::: AfxSocketInit();

紧接着使用协议和端口:m_server.Create(10000);//10000为端口号

接下来监听端口:m_server.Listen();

由于CAsyncSocket是异步的,那么我们怎么才能知道有没有连接加入呢?我们注意到这个类是有回调函数的,再仔细看上面的说明,原来有连接都是调用了OnAccept函数。可问题来了,怎么让OnAccept这个回调函数来调用或者说通知到我们呢?再看MSDN的说明:回调函数是protected的而且还是个虚函数,这样一来我们只要继承这个类,然后重写这个函数就可以达到我们的目的了!






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值