网络编程实用教程第二.pptx

上传人:莉*** 文档编号:87342677 上传时间:2023-04-16 格式:PPTX 页数:44 大小:302.83KB
返回 下载 相关 举报
网络编程实用教程第二.pptx_第1页
第1页 / 共44页
网络编程实用教程第二.pptx_第2页
第2页 / 共44页
点击查看更多>>
资源描述

《网络编程实用教程第二.pptx》由会员分享,可在线阅读,更多相关《网络编程实用教程第二.pptx(44页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、CAsyncSocket类CSocket类两个套接字类两个套接字类第1页/共44页5.1 CasyncSocket类类图5.1 CAsyncSocket类的派生关系 第2页/共44页5.1.1 使用使用CAsyncSocket类的一般步骤类的一般步骤第3页/共44页5.1.2 创建创建CasyncSocket类对象类对象1创建空的异步套接字对象创建空的异步套接字对象 通过调用CAsyncSocket类的构造函数,创建一个新的空CAsyncSocket类套接字对象,构造函数不带参数。然后必须调用它的Create成员函数,来创建底层的套接字数据结构,并绑定它的地址。第4页/共44页有两种使用方法,

2、会在不同的位置创建。(1)如:CAsyncSocket aa;aa.Create(。);(2)如:CAsyncSocket*Pa;Pa=new CAsyncSocket;Pa-Create(。);第5页/共44页2创建异步套接字对象的底层套接字句柄创建异步套接字对象的底层套接字句柄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 );第

3、6页/共44页举例:创建一个使用27端口的流式异步套接字对象。CAsyncSocket*pSocket=new CAsyncSocket;int nPort=27;pSocket-Create(nPort,SOCK_STREAM);第7页/共44页5.1.3 关关于于CAsyncSocket类类可可以以接接受受并并处处理理的的消息事件消息事件 1六种套接字相关的事件与通知消息六种套接字相关的事件与通知消息#define FD_READ 0 x01#define FD_WRITE 0 x02#define FD_OOB 0 x04#define FD_ACCEPT 0 x08#define FD

4、_CONNECT 0 x10#define FD_CLOSE 0 x20 第8页/共44页2MFC框架对于六个网络事件的处理框架对于六个网络事件的处理virtualvoidOnReceive(intnErrorCode);对应FD_READ事件virtualvoidOnSend(intnErrorCode);对应FD_WRITE事件virtualvoidOnAccept(intnErrorCode);对应FD_ACCEPT事件virtualvoidOnConnect(intnErrorCode);对应FD_CONNECT事件第9页/共44页 virtual void OnClose(int n

5、ErrorCode);对应 FD_CLOSE事件 virtual void OnOutOfBandData(int nErrorCode);对应 FD_OOB事件第10页/共44页3重载套接字对象的回调函数重载套接字对象的回调函数 如果你从CAsyncSocket类派生了自己的套接字类,你必须重载你的应用程序所感兴趣的那些网络事件所对应的通知函数。MFC框架自动调用通知函数,使得你可以在套接字被通知的时候来优化套接字的行为。第11页/共44页5.1.4 客客户户端端套套接接字字对对象象请请求求连连接接到到服服务务器器端套接字对象端套接字对象 格式一:BOOL Connect(LPCTSTR l

6、pszHostAddress,UINT nHostPort);格式二:BOOL Connect(const SOCKADDR*lpSockAddr,int nSockAddrLen);第12页/共44页 如 果 调 用 成 功 或 者 发 生 了WSAEWOULDBLOCK错误,当调用结束返回时,都会发生FD_CONNECT事件,MFC框架会自动调用客户端套接字的OnConnect()事件处理函数,并将错误代码作为参数传送给它。它的原型调用格式如下:virtual void OnConnect(int nErrorCode);第13页/共44页5.1.5 服务器接受客户机的连接请求服务器接受客

7、户机的连接请求在服务器端,使用CAsyncSocket流式套接字对象,一般按照以下步骤来接收客户端套接字对象的连接请求。(1)服务器应用程序必须首先创建一个CAsyncSocket流式套接字对象,并调用它的Create成员函数创建底层套接字句柄。这个套接字对象专门用来监听来自客户机的连接请求,所以称它为监听套接字对象。第14页/共44页(2)调用监听套接字对象的Listen成员函数,使监听套接字对象开始监听来自客户端的连接请求。此函数的调用格式是:BOOL Listen(int nConnectionBacklog=5);当Listen函数确认并接纳了一个来自客户端的连接请求后,会触发FD_A

8、CCEPT事件,监听套接字会收到通知,表示监听套接子已经接纳了一个客户的连接请求,MFC框架会自动调用监听套接字的OnAccept事件处理函数,它的原型调用格式如下,virtual void OnAccept(int nErrorCode);第15页/共44页(3)创建一个新的空的套接字对象,不需要使用它的Create函数来创建底层套接字句柄。这个套接字专门用来与客户端连接,并进行数据的传输。一般称它为连接套接字,并作为参数传递给下一步的Accept成员函数。第16页/共44页(4)调用监听套接字对象的Accept成员函数,调用格式为:virtual BOOL Accept(CAsyncSoc

9、ket&rConnectedSocket,SOCKADDR*lpSockAddr=NULL,int*lpSockAddrLen=NULL );第17页/共44页5.1.6 发送与接收流式数据。发送与接收流式数据。1用用Send成员函数发送数据成员函数发送数据virtual int Send(const void*lpBuf,int nBufLen,int nFlags=0);第18页/共44页2用用Receive成员函数接收数据成员函数接收数据 Virtual int Receive(Void*lpBuf,Int nBufLen,Int nFlags=0);第19页/共44页5.1.7 关闭套

10、接字关闭套接字1使用使用CAsyncSocket类的类的Close成员函数成员函数virtualvoidClose();2使用使用CAsyncSocket类的类的ShutDown()成成员函数员函数BOOLShutDown(intnHow=sends);第20页/共44页5.1.8 错误处理错误处理staticintGetLastError();返回值是一个错误码,针对刚刚执行的CAsyncSocket成员函数。第21页/共44页5.1.9 其它的成员函数其它的成员函数1关于套接字属性的函数关于套接字属性的函数SetSocketOpt():设置底层套接字对象的属性;GetSocketOpt()

11、:获取套接字的设置信息;IOCtl():控制套接字的工作模式,选择合适的参数,可以将套接字设置在阻塞模式(Blockingmode)下工作。第22页/共44页2发送和接收数据发送和接收数据发送数据SendTo的调用格式,有两种重载的形式,区别在于参数不同:intSendTo(constvoid*lpBuf,intnBufLen,UINTnHostPort,LPCTSTRlpszHostAddress=NULL,intnFlags=0);第23页/共44页int SendTo(const void*lpBuf,int nBufLen,const SOCKADDR*lpSockAddr,int n

12、SockAddrLen,int nFlags=0);第24页/共44页 接收数据ReceiveFrom的调用格式,也有两种重载的形式,区别在于参数不同:int ReceiveFrom(void*lpBuf,int nBufLen,CString&rSocketAddress,UINT&rSocketPort,int nFlags=0);第25页/共44页 int ReceiveFrom(void*lpBuf,int nBufLen,SOCKADDR*lpSockAddr,int*lpSockAddrLen,int nFlags=0);第26页/共44页5.2 CSocket类类图5.2 CSo

13、cket类的派生关系 第27页/共44页5.2.1 创建创建CSocket对象对象(1)调用CSocket类的构造函数,创建一个空的CSocket对象。(2)调用此CSocket对象的Create()成员函数,创建对象的底层套接字。调用格式是:BOOLCreate(UINTnSocketPort=端口号,IntnSocketPort=SOCK_STREAM|SOCK_DGRAM,LPCTSTRlpszSocketAddress=套接字所用的网络地址);第28页/共44页5.2.2 建立连接建立连接CSocket类使用基类CAsyncSocket的同名成员函数Connect()、Listen()

14、、Accept()来建立服务器和客户机套接字之间的连接,使用方法相同。不同的是:CSocket类的Connect()和Accept()支持阻塞调用。注意:CSocket对象从不调用OnConnect()事件处理函数。第29页/共44页5.2.3 发送和接收数据。发送和接收数据。在创建CSocket类对象后,数据报套接字,直接使用CSocket类的SendTo()、ReceiveFrom()成员函数来发送和接收数据。流式套接字,首先在服务器和客户机之间建立连接,然后使用CSocket类的Send()、Receive()成员函数来发送和接收数据,它们的调用方式与CAsyncSocket类相同。第3

15、0页/共44页 不同的是:CSocket类的这些函数工作在阻塞的模式。一般将CSocket类与CArchive类和CSocketFile类结合,来发送和接收数据,这将使编程更为简单。注意:CSocket对象从不调用OnSend()事件处理函数。第31页/共44页5.2.4 CSocket类与类与CArchive类和类和CSocketFile类类使用CSocket类的最大优点在于,应用程序可以在连接的两端通过CArchive对象来进行数据传输。具体做法是:(1)创建CSocket类对象(2)创建一个基于CSocketFile类的文件对象,并把它的指针传给上面的已创建的CSocket对象。(3)分

16、别创建用于输入和输出的CArchive对象,并将它们与这个CSocketFile文件对象连接。(4)利用CArchive对象来发送和接收数据。第32页/共44页下面是一段示例代码:CSocket exSocket;/创建一个空的CSocket对象。CSocketFile*pExFile;/定义一个CSocketFile对象指针。CArchive*pCArchiveIn;/定 义 一 个 用 于 输 入 的CArchive对象指针。CArchive*pCArchiveOut;/定 义 一 个 用 于 输 出 的Carchive对象指针。exSocket.Create();/创建Csocket对象

17、的底层套接字。第33页/共44页/创建CSocketFile对象,并将CSocket对象的指针传递给它。pExFile=new CSocketFile(&exSocket,TRUE);/创建用于输入的CArchive对象pCArchiveIn=new CArchive(pExFile,CArchive:load);/创建用于输出的CArchive对象。pCArchiveOut=new CArchive(pExFile,CArchive:store);第34页/共44页图5.3 CSocket、CArchive和CSocketFile类在传输数据时的作用 第35页/共44页5.2.5 关闭套接字

18、和清除相关的对象,关闭套接字和清除相关的对象,CSocket:Close()CSocket:ShutDown()第36页/共44页5.3 CSocket类的编程模型类的编程模型下面给出针对流式套接字的CSocket类的编程模型。分为服务器端和客户端。1服务器端服务器端 (1)CSocket sockServ;/创建空的服务器端监听套接字对象。/用众所周知的端口,创建监听套接字对象的底层套接字句柄。(2)sockServ.Create(nPort);(3)sockServ.Listen();/启动对于客户端连接请求的监听。第37页/共44页(4)CSocketsockRecv;/创建空的服务器端

19、连接套接字对象。/接收客户端的连接请求,并将其他的任务转交给连接套接字对象。sockServ.Accept(sockRecv);(5)CSockFile*file;file=new CSockFile(&sockRecv);/创建文件对象并关联到连接套接字对象。第38页/共44页(6)CArchive*arIn,arOut;arIn=CArchive(&file,CArchive:load);/创建用于输入的归档对象,arOut=CArchive(&file,CArchive:store);/创建用于输出的归档对象。/归档对象必须关联到文件对象。(7)arIn dwValue;/进行数据输入。adOut dwValue;/进行数据输入。adOut dwValue;/进行数据输出。输入或输出可以反复进行。(7)sockClient.Close();/传输完毕,关闭套接字对象。第41页/共44页实验二 基于UDP协议的简单聊天室程序设计实验时间:10月18日 周四:8:20-10:00 10月25日 周四:8:20-10:00实验地点:机房第42页/共44页实验三 基于TCP协议的聊天室设计实验时间:10月30日 周二:8:20-10:00 11月1日 周四:8:20-10:00实验地点:机房第43页/共44页感谢您的观看!第44页/共44页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > PPT文档

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com