网络编程实用教程第5章、MFC-WinSock类的编程.ppt
《网络编程实用教程第5章、MFC-WinSock类的编程.ppt》由会员分享,可在线阅读,更多相关《网络编程实用教程第5章、MFC-WinSock类的编程.ppt(68页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第5章 MFC WinSockMFC WinSock类的编程类的编程第五章第五章 MFC WinSockMFC WinSock类的编程类的编程第5章 MFC WinSockMFC WinSock类的编程类的编程第五章第五章 MFC WinSockMFC WinSock类的编程类的编程 为简化套接字网化套接字网络编程,更方便地利程,更方便地利用用Windows Windows 的消息的消息驱动机制,微机制,微软的的 MFC MFC提供了两个套接字提供了两个套接字类,在不同的,在不同的层次上次上对Win Socket APIWin Socket API函数函数进行了封装,行了封装,为编写写网网络通
2、信程序,提供了两种通信程序,提供了两种编程模式。程模式。第5章 MFC WinSockMFC WinSock类的编程类的编程CAsyncSocketCAsyncSocket类类异步套节字类异步套节字类在低层次上对在低层次上对Win Sockets APIWin Sockets API进行了封装。进行了封装。特点:特点:u它的成它的成员函数和函数和Windows Sockets APIWindows Sockets API的函的函数数调用直接用直接对应。u一个一个CAsyncSocketCAsyncSocket对象代表了一个象代表了一个WindowsWindows套接字,它是网套接字,它是网络通
3、信的端点;通信的端点;u将那些与套接字相关的将那些与套接字相关的WindowsWindows消息消息变为该类的回的回调函数。函数。第5章 MFC WinSockMFC WinSock类的编程类的编程CSocketCSocket类类 从从CAsyncSocketCAsyncSocket类派生,是对类派生,是对Win Sockets APIWin Sockets API的高级封装。继承了的高级封装。继承了CAsyncSocketCAsyncSocket类的许多成员函数。类的许多成员函数。CSocketCSocket类的高级表现在三个方面:类的高级表现在三个方面:uCSocketCSocket结合合
4、archivearchive类来使用套接字。来使用套接字。uCSocketCSocket管理了通信的管理了通信的许多方面,如多方面,如字字节顺序序问题和字符串和字符串转换问题。uCSocketCSocket类为WindowsWindows消息的消息的后台后台处理提理提供了阻塞供了阻塞的工作模式。的工作模式。第5章 MFC WinSockMFC WinSock类的编程类的编程CSocketCSocket类类 在在MFCMFC中,有一个名中,有一个名为afxSock.hafxSock.h的包含的包含文件,在文件,在这个文件中定个文件中定义了了CAsyncSocketCAsyncSocket,CSo
5、cketCSocket,和,和CSocketFileCSocketFile这三个套接字三个套接字类。第5章 MFC WinSockMFC WinSock类的编程类的编程5.1 CasyncSocket CasyncSocket类类CAsyncSocketCAsyncSocket类从类从CobjectCobject类派生而来类派生而来:图图5.1 CAsyncSocket类的派生关系类的派生关系 第5章 MFC WinSockMFC WinSock类的编程类的编程5.1.1 使用使用CAsyncSocketCAsyncSocket类的一般步骤类的一般步骤ServerServer端端ClientC
6、lient端端构造套节字,构造套节字,CASyncSocket SockServerCASyncSocket SockServer同前同前 SockClient SockClient创建创建SocketSocket句柄,绑定到指定端口句柄,绑定到指定端口SockServer.SockServer.CreateCreate(nPort,)(nPort,)同前同前监听,准备接受连接请求监听,准备接受连接请求SockServer.ListenSockServer.Listen()()连接到服务器连接到服务器SockClientSockClient.connection(IP,nPort.connec
7、tion(IP,nPort)构造新套接字,构造新套接字,CASyncSocket CASyncSocket SockRecvSockRecv接受连接接受连接 SockRecv.Accept(SockRecv)SockRecv.Accept(SockRecv)接收数据接收数据SockRecv.Receive(pBuf,nLen)SockRecv.Receive(pBuf,nLen)发送数据发送数据SockClient.Send(pBuf,nLen)SockClient.Send(pBuf,nLen)关闭套接字连接关闭套接字连接SockRecv.Close()SockRecv.Close()关闭套
8、接字连接关闭套接字连接SockRecv.Close(SockRecv.Close()第5章 MFC WinSockMFC WinSock类的编程类的编程5.1.1 使用使用CAsyncSocketCAsyncSocket类的一般步骤类的一般步骤注意几个问题:注意几个问题:u阻塞阻塞处理:不支持理:不支持u字字节顺序的序的转换第5章 MFC WinSockMFC WinSock类的编程类的编程5.1.2 创建创建CasyncSocketCasyncSocket类对象类对象 CAsyncSocket CAsyncSocket类对象称为异步套接字对象。类对象称为异步套接字对象。创建异步套接字对象分为
9、两个步骤:创建异步套接字对象分为两个步骤:u构造一个构造一个CAsyncSocketCAsyncSocket对象象:CAsyncSocket aaCAsyncSocket aa;u创建建该对象的底象的底层的的SOCKETSOCKET句柄句柄:aa.Create()aa.Create()第5章 MFC WinSockMFC WinSock类的编程类的编程5.1.2 创建创建CasyncSocketCasyncSocket类对象类对象CreateCreate函数函数创建底建底层套接字句柄套接字句柄 通通过调用用CAsyncSocketCAsyncSocket类的的Create()Create()成
10、成员函数,函数,创建建该对象的底象的底层套接字句柄,决定套接字套接字句柄,决定套接字对象的具象的具体特性。体特性。调用格式用格式为:BOOL Create(UINT nSocketPort=0,Int nSocketType=SOCK_STREAM,Long Ievent=FD_READ|FD_WRITE|FD_OOB|FD_ACCEPT|FD_CONNECT|FD_CLOSE,LPCTSTR lpszSocketAddress=NULL);第5章 MFC WinSockMFC WinSock类的编程类的编程5.1.2 创建创建CasyncSocketCasyncSocket类对象类对象举例:
11、举例:创建一个使用建一个使用2727端口的流式异步套接字端口的流式异步套接字对象。象。CAsyncSocket*pSocket=new CAsyncSocket;int nPort=27;pSocket-Create(nPort,SOCK_STREAM);第5章 MFC WinSockMFC WinSock类的编程类的编程5.1.3 CAsyncSocket类的消息事件类的消息事件1 1六种套接字相关的事件与通知消息六种套接字相关的事件与通知消息 Create Create函数的参数函数的参数IeventIevent为可以可以选用的符号常用的符号常量,是在量,是在winsock.hwinsoc
12、k.h文件中定文件中定义的:的:#define#define FD_READFD_READ 0 x01 0 x01 可以可以RecvRecv#define#define FD_WRITEFD_WRITE0 x020 x02 可以可以SendSend#define#define FD_OOBFD_OOB 0 x040 x04 有有带外数据到达外数据到达#define#define FD_ACCEPTFD_ACCEPT0 x080 x08 有有连接接请求求#define#define FD_CONNECTFD_CONNECT 0 x100 x10 连接接请求已求已处理理#define#define
13、 FD_CLOSEFD_CLOSE0 x200 x20 套接字已关套接字已关闭第5章 MFC WinSockMFC WinSock类的编程类的编程5.1.3 CAsyncSocket类的消息事件类的消息事件 他他们代表代表MFC MFC 套接字套接字对象可以接受并象可以接受并处理的六种理的六种网网络事件,当事件事件,当事件发生生时,套接字,套接字对象会收到相象会收到相应的的通知消息,并自通知消息,并自动执行套接字行套接字对象响象响应的事件的事件处理函理函数。数。uFD_READFD_READ事件:通知有数据可事件:通知有数据可读。uFD_WRITEFD_WRITE事件:通知可以写数据。事件:通
14、知可以写数据。uFD_ACCEPTFD_ACCEPT事件:通知事件:通知监听套接字有听套接字有连接接请求可以接求可以接受。受。uFD_CONNECTFD_CONNECT事件:通知事件:通知请求求连接的套接字,接的套接字,连接的要接的要求已被求已被处理。理。uFD_CLOSEFD_CLOSE事件:通知套接字已关事件:通知套接字已关闭。uFD_OOBFD_OOB事件:通知将有事件:通知将有带外数据到达。外数据到达。第5章 MFC WinSockMFC WinSock类的编程类的编程5.1.3 CAsyncSocket类的消息事件类的消息事件2 2MFCMFC框架对于六个网络事件的处理框架对于六个网
15、络事件的处理 按照按照WindowsWindows的消息的消息驱动机制,机制,MFCMFC框架框架应当把消息当把消息发送送给相相应的套接字的套接字对象,并象,并调用作用作为该对象成象成员函数的事件函数的事件处理函数。事件与理函数。事件与处理函数是一一映射的。理函数是一一映射的。第5章 MFC WinSockMFC WinSock类的编程类的编程5.1.3 CAsyncSocket类的消息事件类的消息事件 在在afxSock.hafxSock.h文件的文件的CAsyncSocketCAsyncSocket类的声明中,定类的声明中,定义了与这六个网络事件对应的事件处理函数:义了与这六个网络事件对应
16、的事件处理函数:uvirtual void virtual void OnReceiveOnReceive(int nErrorCode);(int nErrorCode);对应 FD_READFD_READ事件事件uvirtual void virtual void OnSendOnSend(int nErrorCode);(int nErrorCode);对应 FD_WRITEFD_WRITE事件事件uvirtual void virtual void OnAcceptOnAccept(int nErrorCode);(int nErrorCode);对应 FD_ACCEPTFD_ACCE
17、PT事件事件uvirtual void virtual void OnConnectOnConnect(int nErrorCode);(int nErrorCode);对应 FD_CONNECTFD_CONNECT事件事件第5章 MFC WinSockMFC WinSock类的编程类的编程5.1.3 CAsyncSocket类的消息事件类的消息事件uvirtual void virtual void OnCloseOnClose(int nErrorCode);(int nErrorCode);对应 FD_CLOSE FD_CLOSE 事件事件uvirtual void virtual vo
18、id OnOutOfBandDataOnOutOfBandData(int(int nErrorCode);nErrorCode);对应 FD_OOB FD_OOB 事件事件 当某个网当某个网络事件事件发生生时,MFC MFC 自自动调用套接字用套接字对象象对应的事件的事件处理函数。理函数。这相当于相当于给了套接字了套接字对象一个通知,告象一个通知,告诉它某个重要的事件已它某个重要的事件已经发生。所生。所以也称之以也称之为套接字套接字类的通知函数或回的通知函数或回调函数。函数。第5章 MFC WinSockMFC WinSock类的编程类的编程5.1.3 CAsyncSocket类的消息事件类
19、的消息事件3 3重载套接字对象的回调函数重载套接字对象的回调函数 如果从如果从CAsyncSocket CAsyncSocket 类上派生了自己的套接字上派生了自己的套接字类,你必你必须重重载应用程序所感用程序所感兴趣的那些网趣的那些网络事件事件所所对应的通知函数。的通知函数。MFC MFC框架自框架自动调用通知函数,用通知函数,这样可以在套接字可以在套接字被通知的被通知的时候来候来优化套接字的行化套接字的行为。第5章 MFC WinSockMFC WinSock类的编程类的编程5.1.4 客户端请求连接到服务器端客户端请求连接到服务器端 服服务器端套接字器端套接字对象已象已经进入入监听状听状
20、态后,客后,客户应用程序可以用程序可以调用用CAsyncSocketCAsyncSocket类的的Connect()Connect()成成员函数,向服函数,向服务器器发出一个出一个连接接请求:求:格式一:格式一:BOOL BOOL ConnectConnect(LPCTSTR lpszHostAddress,(LPCTSTR lpszHostAddress,UINT nHostPort);UINT nHostPort);格式二:格式二:BOOL BOOL ConnectConnect(const SOCKADDR*lpSockAddr,(const SOCKADDR*lpSockAddr,in
21、t nSockAddrLen)int nSockAddrLen);第5章 MFC WinSockMFC WinSock类的编程类的编程5.1.4 客户端请求连接到服务器端客户端请求连接到服务器端 如果如果调用成功或者用成功或者发生了生了错误,当,当调用用结束返回束返回时,都会,都会发生生FD_CONNECTFD_CONNECT事件,事件,MFCMFC框架框架会自会自动调用客用客户端套接字的端套接字的OnConnect()OnConnect()事件事件处理函数,并将理函数,并将错误代代码作作为参数参数传送送给它。它它。它的原型的原型调用格式如下,用格式如下,void OnConnect(int
22、nErrorCode);void OnConnect(int nErrorCode);nErrorCode=0nErrorCode=0时时 连接成功连接成功第5章 MFC WinSockMFC WinSock类的编程类的编程 服务器接受客户机的连接请求服务器接受客户机的连接请求 服务器端使用服务器端使用CAsyncSocketCAsyncSocket流式套接字对象,流式套接字对象,按以下步骤来接收客户端的连接请求:按以下步骤来接收客户端的连接请求:1 1)服服务器程序必器程序必须首先首先创建一个建一个CAsyncSocketCAsyncSocket流式套接字流式套接字对象,并象,并调用它的用它
23、的Create Create 成成员函函数数创建底建底层套接字句柄(套接字句柄(监听听专用)。用)。2 2)调用用监听套接字听套接字对象的象的ListenListen成成员函数。函数。调用格式是:用格式是:B BOOL Listen(int nConnectionBacklog=5)OOL Listen(int nConnectionBacklog=5);第5章 MFC WinSockMFC WinSock类的编程类的编程 服务器接受客户机的连接请求服务器接受客户机的连接请求 当当Listen Listen 函数确函数确认并接并接纳了一个来自客了一个来自客户端的端的连接接请求后,会触求后,会触
24、发FD_ACCEPTFD_ACCEPT事件,事件,监听套接字会听套接字会收到通知,表示收到通知,表示监听套接子已听套接子已经接接纳了一个客了一个客户的的连接接请求,求,MFCMFC框架会自框架会自动调用用OnAcceptOnAccept事件事件处理函理函数,原型如下:数,原型如下:void OnAccept(int nErrorCode);void OnAccept(int nErrorCode);应重载此函数,在其中调用监听套接字对象的应重载此函数,在其中调用监听套接字对象的AcceptAccept函数,来接收客户端的连接请求。函数,来接收客户端的连接请求。第5章 MFC WinSockMF
25、C WinSock类的编程类的编程 服务器接受客户机的连接请求服务器接受客户机的连接请求3 3)创建一个新的空的套接字建一个新的空的套接字对象。象。这个套接字个套接字专门用来与客用来与客户端端连接,并接,并进行数据的行数据的传输。称称为连接套接字。接套接字。4 4)调用用监听套接字听套接字对象的象的AcceptAccept成成员函数,函数,调用格式用格式为:virtual BOOL Accept(CAsyncSocket&rConnectedSocket,SOCKADDR*lpSockAddr=NULL,int*lpSockAddrLen=NULL);第5章 MFC WinSockMFC Wi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 编程 实用教程 MFC WinSock
限制150内