利用MFC进行网络编程NetworkProgrammingwithMFC.ppt

上传人:本田雅阁 文档编号:2589259 上传时间:2019-04-13 格式:PPT 页数:48 大小:674.51KB
返回 下载 相关 举报
利用MFC进行网络编程NetworkProgrammingwithMFC.ppt_第1页
第1页 / 共48页
利用MFC进行网络编程NetworkProgrammingwithMFC.ppt_第2页
第2页 / 共48页
利用MFC进行网络编程NetworkProgrammingwithMFC.ppt_第3页
第3页 / 共48页
亲,该文档总共48页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《利用MFC进行网络编程NetworkProgrammingwithMFC.ppt》由会员分享,可在线阅读,更多相关《利用MFC进行网络编程NetworkProgrammingwithMFC.ppt(48页珍藏版)》请在三一文库上搜索。

1、利用MFC进行网络编程 Network Programming with MFC,Prof. Xiao-jie Yuan,内容提要,网络基础知识 MFC网络编程 Windows套接字 CAsyncSocket类 TCP协议编程 聊天室客户端 聊天室服务器端 程序功能演示,网络基础知识,/,网络基础知识:对TCP/IP协议进行简要介绍,网络基础知识,TCP/IP协议,Windows的网络通信建立在TCP/IP协议的基础上 TCP/IP协议族包含一系列构成互联网基础结构的网络协议 TCP/IP字面上代表两个重要协议 TCP: 传输控制协议 IP: 网际协议,网络基础知识,TCP/IP参考模型,TC

2、P/IP参考模型包括4层: 主机至网络层(Host-to-network) 互联层(Internet) 传输层(Transport) 应用层(Application),网络基础知识,TCP/IP模型与OSI模型,应用层,表示层,传输层,网络层,数据链路层,物理层,会话层,应用层,传输层,互联层,主机至网络层,OSI,TCP/IP,网络基础知识,几个典型的协议,IP协议(互联层) 是一个路由协议,负责IP寻址、数据包的分片和重组等任务 TCP协议(传输层) 提供一对一有连接的通信服务 提供连接的确认,数据包发送/接收顺序的控制,出错重传等机制 保证数据在传输中的正确性 HTTP协议(应用层) 用

3、于传送Web网页文件,网络基础知识,数据包的封装,应用层,传输层,互联层,主机至网络层,TCP/IP模型,应用程序,HTTP协议,TCP协议,IP协议,网卡驱动,以太网首部,IP首部,TCP首部,HTTP首部,用户数据,以太网尾部,IP首部,TCP首部,HTTP首部,用户数据,TCP首部,HTTP首部,用户数据,HTTP首部,用户数据,用户数据,使用协议,封装的数据包,MFC网络编程,/,MFC网络编程:Windows套接字,Windows套接字,什么是套接字,套接字是一种网络编程接口 英文:socket 字面意思:插座、插口 可以形象地将套接字理解为应用程序与网络协议之间的插口,也就是编程接

4、口 套接字在TCP/IP模型中位于传输层之上 主要针对TCP、UDP协议进行抽象 不涉及应用层协议,Windows套接字,套接字在TCP/IP模型中的位置,主机至网络层,互联层,IP,ARP,ICMP,IGMP,传输层,TCP,UDP,应用层,套接字 Sockets,Windows套接字,套接字是网络通信的端点,在网络中,主机H1上的一个套接字端点(endpoint)可以和主机H2上的另一个套接字端点进行通信 IP地址和端口号可以唯一确定一个套接字,Windows套接字,Windows套接字,套接字的概念最初是由BSD Unix操作系统所实现的 Microsoft将Unix套接字中的大部分函数

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

6、层次,CObject,CAsyncSocket,CSocket,/,MFC网络编程:CAsyncSocket类,CAsyncSocket类,CAsyncSocket类,虽然对Windows Sockets API的封装级别较低 但该类为网络通信程序的开发提供了很大的灵活性 可以对一些有关网络协议的具体选项参数进行设定,CAsyncSocket类,CAsyncSocket类,CAsyncSocket类只将套接字的通知消息改进为C+语言中的可重载的消息处理函数 没有像CSocket那样引入文件、文档、串行化等其他额外的概念,这使编程变得更加简洁方便,CAsyncSocket类,创建CAsyncSo

7、cket类对象,CAsyncSocket类对象代表网络通信端点 采用两步构造法: 1、定义CAsyncSocket类对象变量 CAsyncSocket sock; 2、调用Create成员函数进一步创建该对象 sock.Create();,CAsyncSocket类,套接字的种类,流套接字(stream socket) 使用TCP协议进行通信 具有TCP协议所拥有的各种特征 面向连接的、可靠的数据流传输服务 数据包不会出现丢失、重复、乱序等现象 数据报套接字(datagram socket) 使用UDP协议进行通信 具有UDP协议所拥有的各种特征 面向非连接的、不可靠的用户数据报传输服务 数据

8、包可能出现丢失、重复、乱序等现象,CAsyncSocket类,指定套接字的种类,Create成员函数缺省创建的是流套接字SOCK_STREAM 也可以根据需要指明创建数据报套接字SOCK_DGRAM 流套接字和数据报套接字在收发数据时所调用的函数有所不同 流套接字调用成员函数 Send 和 Receive 数据报套接字调用成员函数 SendTo 和 ReceiveFrom,CAsyncSocket类,套接字的工作模式,套接字在使用时分为两种模式 阻塞式 非阻塞式 阻塞模式也称为同步模式 非阻塞模式也称为异步模式,CAsyncSocket类,阻塞模式,在阻塞模式下,套接字函数要一直等到全部操作完

9、成后才返回 例如,在建立连接时 函数必须等到连接完全建立好为止 调用函数的线程在这期间被挂起 程序看起来好像停止了响应,CAsyncSocket类,阻塞模式的缺点,以阻塞模式执行套接字函数,可能会出现某个函数的执行等待很长时间的情况 必须考虑建立多个线程来执行每个套接字函数,程序编写起来比较繁琐,CAsyncSocket类,非阻塞模式,BSD Unix是命令行方式的系统 套接字适合以阻塞模式工作 Windows是消息驱动的系统 套接字适合以非阻塞模式工作 Windows为所有的套接字函数提供了非阻塞模式的版本,CAsyncSocket类,非阻塞模式,在非阻塞模式下 一个套接字函数被调用后会立即

10、返回 即使它执行的操作还没有全部完成 当函数最终完成所执行的操作时 Windows通过发送消息的方式通知程序 该模式适合Windows的消息驱动体系,CAsyncSocket类,非阻塞模式,Windows套接字接口建议程序员使用非阻塞模式进行网络通信编程 一个CAsyncSocket类对象默认地工作在非阻塞模式(即异步模式)下 这就是CAsyncSocket(Asyncronization Socket)这个类名称的来源,CAsyncSocket类,绑定IP地址和端口号,调用Create函数时还可以指定,套接字对象所要绑定的 主机IP地址 端口号 Create函数根据这个IP地址和端口号去调用

11、Bind函数以实现套接字的绑定,CAsyncSocket类,通信前的准备工作,客户端调用Connect函数以连接到服务器 服务器端调用Listen函数监听客户的进入 服务器端调用Accept函数与客户建立连接,客 户 端,服 务 器 端,CAsyncSocket类,收发数据,CAsyncSocket类,处理通知消息,CAsyncSocket类对底层Windows 套接字API的改进 调用AsyncSelect函数指定程序要处理的套接字通知消息 实现非阻塞模式套接字的关键在于处理通知消息,CAsyncSocket类,处理通知消息,用于处理通知消息的虚函数 OnAccept: 当一个连接请求到来时

12、 OnConnet: 当一个连接尝试完成时 OnClose: 当另一端套接字关闭时 OnReceive:当准备好接收数据时 OnSend: 当准备好发送数据时,CAsyncSocket类,套接字句柄,CAsyncSocket类有一个成员变量 m_hSocket 它代表CAsyncSocket类对象所依附的Windows套接字句柄,CAsyncSocket类,错误处理,大多数套接字函数都可能调用失败 当某个套接字函数调用失败时 返回错误码SOCKET_ERROR 紧跟着调用函数GetLastError进一步获得出错原因码 通过查表可得到出错原因的描述 针对各种异常情况进行不同处理,CAsyncS

13、ocket类,CAsyncSocket类成员列表,CAsyncSocket类成员列表,CAsyncSocket类成员列表,CAsyncSocket类成员列表,TCP协议编程,客户机/服务器模型,客户机是在本地计算机上运行的向服务器请求服务的程序 客户机程序是有限的 由用户启动,当所需服务完成时就终止 客户机程序是通信的主动发起方 使用远端计算机的IP地址与在该计算机上运行的特定服务器程序的特定端口号建立通信连接,客户机/服务器模型,服务器是在远端计算机上运行的向客户提供服务的程序 当服务器启动时,将“门”打开使得从客户发出的连接请求可以进来 服务器程序是无限的 当它启动以后就不停的运行下去,除

14、非出了故障 服务器是通信的被动等待方,客户机/服务器模型,绑定本地IP地址和服务端口 (Create Bind),监听进入的连接(Listen),接收连接(Accept),收发数据(Send/Receive),创建套接字(Create),服务器端,关闭套接字(Close),向服务器发起连接 (Connect),创建套接字(Create),客户端,关闭套接字(Close),收发数据(Send/Receive),简单的聊天室程序,演示如何利用MFC的CAsyncSocket类进行网络通信编程 编写一个简单的聊天室程序 使用流套接字进行网络通信 是基于TCP协议的 包括客户端和服务器端两个部分 验证了客户机/服务器模型,聊天室客户端,聊天室服务器端,总结,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1