VC++的微软基础类库(Microsoft Foundation Class Library,MFC)封装了大部分API函数,并提供了一个应用程序框架,简化了和标准化了Windows程序设计,所以用MFC编写Windows应用程序也称为标准Windows程序设计[4]。MFC约有200个类,提供了Windows应用程序框架和创建应用程序的组件。其中只有5个核心类对应用程序框架有影响:CWinApp,CDocument,CView,CFrameWnd和CDocTemplate。五个之中只有CWinApp是必不可少的类,CWinApp的对象在应用程序中必须有一个,也只有一个,并是一个全局对象,它建立了应用程序执行的主线程。全局对象是在MFC初始化之前,也即当Windows操作系统调用WinMain( )时,这个对象就先已建立,即主线程已建立。形象地说,执行程序的通路已经开通。
在MFC编程中,入口函数WinMain( )被封装在MFC的应用程序框架内,称为AfxWinMain(),已经不用也不可以再定义另一个WinMain()函数。MFC编程最好的办法是使用MFC的应用程序向导工具AppWizard。AppWizard为程序员提供了一种快捷方便的工具来定制基于MFC的应用程序框架,程序员只需以此为基础,添加与修改程序代码来实现所需功能。MFC编程包含三种类型的应用程序:单文档界面(SDI)应用程序、多文档界面(MDI)应用程序和基于对话框(Dialog Based)的应用程序,它们都可以由AppWizard引导建立起来。
2.2 socket网络编程
2.2.1 socket的定义
Socket的英文原意是“孔”或“插座”,中文译为“套接字”,是一种进程的通信机制[5]。Socket是可以被命名和寻址的通信端点,它用一个Socket号标识一个与之相联系的进程。Socket向应用程序提供了统一的网络通信编程接口,屏蔽了下层的通信协议和物理介质的细节,降低了通信系统开发难度。
Socket存在于通信域中。所谓通信域,就是利用Socket通信的进程的相关特性、信息的集合。TCP/IP协议使用的是网际通信域(AF_INET)
根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。
服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求[6]。
2.2.2 Windows Sockets介绍
在MFC类库中,几乎封装了Windows Sockets的全部功能。其中两个主要的套接字相关类,分别是CAsyncSocket类和CSocket类。
CSocket类派生于CAsyncSocket类。该类不但具有CAsyncSocket类的基本功能,还具有串行化功能。用户在实际编程中,通过将CSocket类与CSocketFile类和CArchive类一起使用,能够很好地管理数据以及发送数据。用户使用该类进行网络编程的步骤如下:
a)创建CSocket类对象。
b)如果创建服务器端套接字,则调用函数Bind()绑定本地IP和端口,然后调用函数Listen()监听客户端的请求。如果请求到来,则调用函数Accept()响应该请求。如果创建客户端套接字,则直接调用函数Connect()连接服务器即可。 论文网