书签 分享 收藏 举报 版权申诉 / 39
上传文档赚钱

类型网络编程知识要点课件.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:2983718
  • 上传时间:2022-06-19
  • 格式:PPT
  • 页数:39
  • 大小:1.74MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《网络编程知识要点课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    网络 编程 知识 要点 课件
    资源描述:

    1、MFC的CSocket类网络通信介绍常州大学数理学院2014.6Windows套接字什么是套接字v套接字是一种网络编程接口 英文:socket 字面意思:插座、插口v可以形象地将套接字理解为应用程序与网络协议之间的插口,也就是编程接口Windows套接字套接字是网络通信的端点v在网络中,主机H1上的一个套接字端点(endpoint)可以和主机H2上的另一个套接字端点进行通信vIP地址和端口号可以唯一确定一个套接字Windows套接字Windows套接字vMicrosoft将Unix套接字中的大部分函数移植到Windows操作系统,形成了Windows套接字vWindows套接字针对Window

    2、s操作系统的消息驱动机制,对原有的Unix套接字进行了扩展,定义了一部分新的函数Windows套接字在MFC中使用Windows套接字v使用MFC提供的Windows套接字功能 可以利用面向对象的概念进行网络编程 比直接调用Win32 API更方便、更直观vMFC中与套接字功能有关的类包括: CAsyncSocket类: 对套接字API进行了较低级别的封装 CSocket类: 对套接字API进行了较高级别的封装 CSocket类是CAsyncSocket类的派生类Windows套接字套接字类的层次CObjectCAsyncSocketCSocketCAsyncSocket类CAsyncSock

    3、et类v虽然对Windows Sockets API的封装级别较低v但该类为网络通信程序的开发提供了很大的灵活性v可以对一些有关网络协议的具体选项参数进行设定CAsyncSocket类CAsyncSocket类vCAsyncSocket类只将套接字的通知消息改进为C+语言中的可重载的消息处理函数v没有像CSocket那样引入文件、文档、串行化等其他额外的概念,这使编程变得更加简洁方便CAsyncSocket类创建CAsyncSocket类对象vCAsyncSocket类对象代表网络通信端点v采用两步构造法:1、定义CAsyncSocket类对象变量CAsyncSocket sock;2、调用C

    4、reate成员函数进一步创建该对象sock.Create();CAsyncSocket类套接字的种类v流套接字(stream socket) 使用TCP协议进行通信 具有TCP协议所拥有的各种特征 面向连接的、可靠的数据流传输服务 数据包不会出现丢失、重复、乱序等现象v数据报套接字(datagram socket) 使用UDP协议进行通信 具有UDP协议所拥有的各种特征 面向非连接的、不可靠的用户数据报传输服务 数据包可能出现丢失、重复、乱序等现象CAsyncSocket类指定套接字的种类vCreate成员函数缺省创建的是流套接字SOCK_STREAMv也可以根据需要指明创建数据报套接字SOC

    5、K_DGRAMv流套接字和数据报套接字在收发数据时所调用的函数有所不同 流套接字调用成员函数 Send 和 Receive 数据报套接字调用成员函数 SendTo 和 ReceiveFromCAsyncSocket类套接字的工作模式v套接字在使用时分为两种模式 阻塞式 非阻塞式v阻塞模式也称为同步模式 (开始,等待结果.再开始,再等待结果)v非阻塞模式也称为异步模式() (开始,再开始,等待结果,再等待结果)CAsyncSocket类阻塞模式v在阻塞模式下,套接字函数要一直等到全部操作完成后才返回v例如,在建立连接时 函数必须等到连接完全建立好为止 调用函数的线程在这期间被挂起 程序看起来好像

    6、停止了响应CAsyncSocket类阻塞模式的缺点v以阻塞模式执行套接字函数,可能会出现某个函数的执行等待很长时间的情况v必须考虑建立多个线程来执行每个套接字函数,程序编写起来比较繁琐CAsyncSocket类绑定IP地址和端口号 1. 调用Create函数时还可以指定,套接字对象所要绑定的主机IP地址端口号2. Create函数根据这个IP地址和端口号去调用Bind函数以实现套接字的绑定CAsyncSocket类通信前的准备工作1.客户端调用Connect函数以连接到服务器2.服务器端调用Listen函数监听客户的进入3.服务器端调用Accept函数与客户建立连接客户端服务器端1Connec

    7、t2Listen3AcceptCAsyncSocket类收发数据发送数据接收数据流套接字SendReceive数据报套接字SendToReceiveFromCAsyncSocket类处理通知消息 vCAsyncSocket类对底层Windows 套接字API的改进v调用AsyncSelect函数指定程序要处理的套接字通知消息 v实现非阻塞模式套接字的关键在于处理通知消息CAsyncSocket类处理通知消息 v用于处理通知消息的虚函数 OnAccept: 当一个连接请求到来时 OnConnet: 当一个连接尝试完成时 OnClose: 当另一端套接字关闭时 OnReceive:当准备好接收数据

    8、时 OnSend: 当准备好发送数据时CAsyncSocket类套接字句柄 vCAsyncSocket类有一个成员变量m_hSocket v它代表CAsyncSocket类对象所依附的Windows套接字句柄CAsyncSocket类错误处理v大多数套接字函数都可能调用失败v当某个套接字函数调用失败时 返回错误码SOCKET_ERRORv紧跟着调用函数GetLastError进一步获得出错原因码 通过查表可得到出错原因的描述 针对各种异常情况进行不同处理CAsyncSocket类CAsyncSocket类成员列表 成员函数描述 用于构造 CAsyncSocket 构造函数 Create 创建一

    9、个套接字 CAsyncSocket类成员列表 成员函数 描述 属性 Attach 将一个套接字句柄附属于CAsyncSocket对象 Detach 从CAsyncSocket对象中分离套接字句柄 FromHandle 给定一个套接字句柄,返回一个指向 CAsyncSocket对象的指针 GetLastError 得到最后一个失败操作的错误情况 GetPeerName 得到与套接字连接的对等套接字的地址 GetSockName 得到套接字的本地名称 GetSockOpt 获取套接字的选项 SetSockOpt 设置套接字的选项 CAsyncSocket类成员列表 成员函数 描述 操作 Accep

    10、t 接受套接字上的一个连接 AsynSelect 设置套接字的通知事件 Bind 将一个本地地址绑定到套接字上 Close 关闭套接字 Connect 与对等套接字建立连接 IOCtl 控制套接字的方式 Listen 监听进入的连接请求 Receive 从套接字接收数据 ReceiveFrom 接收一个数据报并且存储源端地址 Send 向一个连接的套接字发送数据 SendTo 向一个指定的地址发送数据 ShutDown 禁止在套接字上调用函数Send和ReceiveCAsyncSocket类成员列表 成员函数 描述 通知消息处理 OnAccept 通知一个监听套接字,它可以通过调用Accept

    11、 函数来接收等待中的连接请求 OnClose 通知套接字与它连接的另一个套接字已经关闭 OnConnect 通知一个连接中的套接字,连接的尝试已经完 成,是否成功可以通过错误码进一步判断 OnOutOfBandData 通知一个正在接收数据的套接字,有“带外数据” 要被读入,这通常是一个紧急的报文 OnReceive 通知套接字可以通过调用Receive函数来获取 数据 OnSend 通知套接字可以通过调用Send函数来发送数据 成员变量 m_hSocket 代表附属于CAsyncSocket对象的SOCKET句柄MFC框架对于六个网络事件的处理六种套接字相关的事件与通知消息参数Ievent可

    12、以选用的六个符号常量是在winsock.h文件中定义的。#define FD_READ 0 x01#define FD_WRITE 0 x02#define FD_OOB 0 x04#define FD_ACCEPT 0 x08#define FD_CONNECT 0 x10#define FD_CLOSE 0 x20 当事件发生时,套接字对象会收到相应的通知消息,并自动执行套接字对象响应的事件处理函数。(1)FD_READ事件通知:通知有数据可读。(2)FD_WRITE事件通知:通知可以写数据。(3)FD_ACCEPT事件通知:通知监听套接字有连接请求可以接受。(4)FD_CONNECT事件

    13、通知:通知请求连接的套接字,连接的要求已被处理。(5)FD_CLOSE事件通知:通知套接字已关闭。(6)FD_OOB事件通知:通知将有带外数据到达。 网络事件发生时,按照Windows的消息驱动机制,MFC框架应当把消息发送给相应的套接字对象,并调用作为该对象成员函数的事件处理函数。事件与处理函数是一一映射的。 afxSock.h文件中六个网络事件对应的事件处理函数。/FD_READ事件virtual void OnReceive(int nErrorCode);/ FD_WRITE事件virtual void OnSend(int nErrorCode);/FD_ACCEPT事件virtua

    14、l void OnAccept(int nErrorCode);/FD_CONNECT事件virtual void OnConnect(int nErrorCode);/FD_CLOSE事件virtual void OnClose(int nErrorCode);/FD_OOB事件virtual void OnOutOfBandData(int nErrorCode) 当某个网络事件发生时,MFC框架会自动调用套接字对象的对应的事件处理函数。这就相当给了套接字对象一个通知,告诉它某个重要的事件已经发生。所以也称之为套接字类的通知函数或回调函数。客户端套接字对象请求连接到服务器端 在服务器端套接

    15、字对象已经进入监听状态之后,客户应用程序可以调用Connect()成员函数,向服务器发出一个连接请求, 格式:BOOL Connect(LPCTSTR lpszHostAddress, UINT nHostPort ); 如果调用成功或者发生了WSAEWOULDBLOCK错误,当调用结束返回时,都会发生FD_CONNECT事件,MFC框架会自动调用客户端套接字的OnConnect()事件处理函数,并将错误代码作为参数传送给它。它的原型调用格式如下, virtual void OnConnect( int nErrorCode ); 服务器接受客户机的连接请求在服务器端,使用套接字对象,一般按照

    16、以下步骤来接收客户端套接字对象的连接请求。(1)服务器应用程序必须首先创建一个套接字对象,并调用它的Create成员函数创建底层套接字句柄。这个套接字对象专门用来监听来自客户机的连接请求,所以称它为监听套接字对象。 (2)调用监听套接字对象的Listen成员函数,使监听套接字对象开始监听来自客户端的连接请求。此函数的调用格式是:BOOL Listen( int nConnectionBacklog = 5); 当Listen函数确认并接纳了一个来自客户端的连接请求后,会触发FD_ACCEPT事件,监听套接字会收到通知,表示监听套接子已经接纳了一个客户的连接请求,MFC框架会自动调用监听套接字的

    17、OnAccept事件处理函数,它的原型调用格式如下,virtual void OnAccept( int nErrorCode );一般应重载此函数,在其中调用监听套接字对象的Accept函数,来接收客户端的连接请求。 (3)创建一个新的空的套接字对象,不需要使用它的Create函数来创建底层套接字句柄。这个套接字专门用来与客户端连接,并进行数据的传输。一般称它为连接套接字,并作为参数传递给下一步的Accept成员函数。 (4)调用监听套接字对象的Accept成员函数,调用格式为:virtual BOOL Accept( CAsyncSocket& rConnectedSocket,SOCKA

    18、DDR* lpSockAddr = NULL,int* lpSockAddrLen = NULL ); 发送与接收数据 当服务器和客户机建立了连接以后,就可以在服务器端的连接套接字对象和客户端的套接字对象之间传输数据了。Send成员函数向套接字发送数据,使用Receive成员函数从套接字接收数据。 1用Send成员函数发送数据格式:virtual int Send( const void* lpBuf, int nBufLen, int nFlags = 0); 对于套接字对象,当它的发送缓冲区腾空时,会激发FD_WRITE事件,套接字会得到通知,MFC框架会自动调用这个套接字对象的OnSend事件处理函数。一般编程者会重载这个函数,在其中调用Send成员函数来发送数据。 2用Receive成员函数接收数据格式: Virtual int Receive( Void* lpBuf, Int nBufLen, Int nFlags = 0); 对于一个套接字对象,当有数据到达它的接收队列时,会激发FD_READ事件,套接字会得到已经有数据到达的通知,MFC框架会自动调用这个套接字对象的OnReceive事件处理函数。重载这个函数,在其中调用Receive成员函数来接收数据。在应用程序将数据取走之前,套接字接收的数据将一直保留在套接字的缓冲区中。

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:网络编程知识要点课件.ppt
    链接地址:https://www.163wenku.com/p-2983718.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库