- 1、本文档共81页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第2章 MFC Socket编程课件
;2.1.1 MFC简介
MFC是很庞大的,以Visual C++ 6.0所带的MFC 4.21为例,已经包含了多达上百个类、结构和接口!;层次结构可分为如下几种不同的类型:
? 应用程序框架;
? 图形绘制的绘制对象;
? 文件服务;
? 异常处理;
? 结构,如Lists、Arrays和Maps;
? Internet服务;
? OLE 2;
? 数据库;1.CAsyncSocket类
CAsyncSocket类是从MFC的根类CObject派生出来的,它在较低的级别上封装Windows Socket API,因此类中包含的大部分成员函数和底层Winsock API函数有很多相似之处,有的甚至连名称和参数叫法都是相同或相近的。
;2.CSocket类及其相关类
(1)CSocket类。
CSocket类是从CAsyncSocket类派生而来的,它继承了CAsyncSocket对Windows Socket API的封装。与CAsyncSocket对象相比,CSocket对象代表了Windows Socket API的更高一级的抽象化。
;(2)CSocket与CArchive、CSocketFile类的配合使用。
使用CSocket类编写网络程序,既可以使用如CAsyncSocket类网络程序一样的Send和Receive函数来收发信息,也可以与CSocketFile类和CArchive类一起管理数据的发送和接收。
;补充:CString与string;2.2.1 客户端—服务器方式(C/S模式)
1.网络程序的通用体系结构
客户端—服务器方式所描述的是进程之间服务和被服务的关系。主机A运行客户端程序而主机B运行服务器程序。
;;;基于TCP的网络应用程序通信过程;2.最简单的Socket通信流程
这里先来考虑一个只有客户端向服务方发信息的单向通信,并且也只有客户端会主动提出断开连接的最简单的情形(相反过程的原理是一样的),其双方Socket之间的关系如图所示。
;由上面这个过程很容易得出对应的Socket通信流程。
;1.对象分析
若要实现上节分析的Socket通信流程共需要三个套接字对象:客户端一个(称为“客户Socket”);服务器两个(一个用于监听,称为“监听Socket”;另一个用于接收客户发来的信息,称为“服务Socket”)。这三个套接字对象对应三个Socket类,都继承自CAsyncSocket,分别为它们取名如表2.2所示(表中的类名也是后面程序中需要使用的)。
;案例:使用CAsyncSocket类实现网络通信;案例:使用CAsyncSocket类实现网络通信;案例:使用CAsyncSocket类实现网络通信;案例:使用CAsyncSocket类实现网络通信;案例:使用CAsyncSocket类实现网络通信;案例:使用CAsyncSocket类实现网络通信;案例:使用CAsyncSocket类实现网络通信;案例:使用CAsyncSocket类实现网络通信;案例:使用CAsyncSocket类实现网络通信;案例:使用CAsyncSocket类实现网络通信;案例:使用CAsyncSocket类实现网络通信;案例:使用CAsyncSocket类实现网络通信;案例:使用CAsyncSocket类实现网络通信;案例:使用CAsyncSocket类实现网络通信;案例:使用CAsyncSocket类实现网络通信;添加CClientSocket的OnConnect虚函数;添加CClientSocket的OnConnect虚函数;添加CClientSocket的OnConnect虚函数;案例:使用CAsyncSocket类实现网络通信;;案例:使用CAsyncSocket类实现网络通信;具体实现;案例:使用CAsyncSocket类实现网络通信;1.非指针程序的机制缺陷
前面的程序存在以下缺陷:
1)Socket的创建、使用和销毁不灵活。
2)程序代码分散。如服务端就有CListenSocket和CServerSocket两个类的基类是CAsyncSocket。
;1.非指针程序的机制缺陷
前面的程序存在以下缺陷:
3)代码可读性差。
如果在Socket的代码中要访问和控制主对话框界面上的控件,则需要运用AfxGetApp()全局函数获取主窗口CWinApp类指针,这意味着每一个在Socket中访问到主界面控件的语句前都要写上冗长的类似下面的这句代码:
?((CChatClientDlg*)(AfxGetApp()-m_pMainWnd))-
;2.用对话框指针机制实现的Socket程序
(1)建立工程。
分别创建客户端和服务器工程,客户和服务器工程中各添加一个基于CAsyncSocket类的MySocket类,这个
文档评论(0)