当前位置:文档之家› 利用MFC进行网络编程剖析

利用MFC进行网络编程剖析

■ CAsyncSocket类对象代表网络通信端点
■ 采用两步构造法:
1、定义CAsyncSocket类对象变量 CAsyncSocket sock;
2、调用Create成员函数进一步创建该对象 sock.Create();
CAsyncSocket类
套接字的种类
■ 流套接字(stream
socket)
• SendTo 和 ReceiveFromCAsynຫໍສະໝຸດ Socket类套接字的工作模式
■ 套接字在使用时分为两种模式
– 阻塞式 – 非阻塞式
■ 阻塞模式也称为同步模式 ■ 非阻塞模式也称为异步模式
CAsyncSocket类
阻塞模式
■ 在阻塞模式下,套接字函数要一直等
到全部操作完成后才返回 ■ 例如,在建立连接时
网卡驱动
主机至网络层
封装的数据包
网络基础知识
使用协议
MFC网络编程
什么是套接字
■ 套接字是一种网络编程接口
– 英文:socket – 字面意思:插座、插口
■ 可以形象地将套接字理解为应用程序与网
络协议之间的插口,也就是编程接口 ■ 套接字在TCP/IP模型中位于传输层之上
– 主要针对TCP、UDP协议进行抽象 – 不涉及应用层协议
– 函数必须等到连接完全建立好为止 – 调用函数的线程在这期间被挂起 – 程序看起来好像停止了响应
CAsyncSocket类
阻塞模式的缺点
■ 以阻塞模式执行套接字函数,可能会
Windows套接字
Windows套接字
■ 套接字的概念最初是由BSD
Unix操作系统
所实现的 ■ Microsoft将Unix套接字中的大部分函数移 植到Windows操作系统,形成了Windows 套接字 ■ Windows套接字针对Windows操作系统的 消息驱动机制,对原有的Unix套接字进行 了扩展,定义了一部分新的函数
利用MFC进行网络编程
Network Programming with MFC
Prof. Xiao-jie Yuan
内容提要
■ 网络基础知识
■ MFC网络编程
– Windows套接字 – CAsyncSocket类
■ TCP协议编程
– 聊天室客户端 – 聊天室服务器端 – 程序功能演示
网络基础知识
Windows套接字
在MFC中使用Windows套接字
■ 使用MFC提供的Windows套接字功能
– 可以利用面向对象的概念进行网络编程 – 比直接调用Win32 API更方便、更直观
■ MFC中与套接字功能有关的类包括:
– CAsyncSocket类: • 对套接字API进行了较低级别的封装
– CSocket类: • 对套接字API进行了较高级别的封装 – CSocket类是CAsyncSocket类的派生类
网络基础知识
TCP/IP模型与OSI模型
OSI 应用层 TCP/IP
表示层
会话层 传输层 网络层 数据链路层
应用层
传输层 互联层 主机至网络层
物理层
网络基础知识
几个典型的协议
■ IP协议(互联层)
– 是一个路由协议,负责IP寻址、数据包的分片 和重组等任务
■ TCP协议(传输层)
– 提供一对一有连接的通信服务 – 提供连接的确认,数据包发送/接收顺序的控制, 出错重传等机制 – 保证数据在传输中的正确性
CAsyncSocket类
CAsyncSocket类
■ CAsyncSocket类只将套接字的通知
消息改进为C++语言中的可重载的消 息处理函数 ■ 没有像CSocket那样引入文件、文档、 串行化等其他额外的概念,这使编程 变得更加简洁方便
CAsyncSocket类
创建CAsyncSocket类对象
Windows套接字
套接字在TCP/IP模型中的位置
应用层
套接字 Sockets
传输层
TCP IP
UDP
IGMP ICMP
互联层
主机至网络层
Windows套接字
ARP 以太网
令牌环 帧中继 ATM
...
套接字是网络通信的端点
■ 在网络中,主机H1上的一个套接字端点
(endpoint)可以和主机H2上的另一个套 接字端点进行通信 ■ IP地址和端口号可以唯一确定一个套接字
– 使用TCP协议进行通信 – 具有TCP协议所拥有的各种特征
• 面向连接的、可靠的数据流传输服务 • 数据包不会出现丢失、重复、乱序等现象
■ 数据报套接字(datagram
socket)
– 使用UDP协议进行通信 – 具有UDP协议所拥有的各种特征
• 面向非连接的、不可靠的用户数据报传输服务 • 数据包可能出现丢失、重复、乱序等现象
Windows套接字
套接字类的层次
CObject
CAsyncSocket
CSocket
Windows套接字
CAsyncSocket类
■ 虽然对Windows
Sockets API的封
装级别较低 ■ 但该类为网络通信程序的开发提供了 很大的灵活性 ■ 可以对一些有关网络协议的具体选项 参数进行设定
CAsyncSocket类
指定套接字的种类
■ Create成员函数缺省创建的是流套接字
SOCK_STREAM
■ 也可以根据需要指明创建数据报套接字
SOCK_DGRAM
■ 流套接字和数据报套接字在收发数据时所
调用的函数有所不同
– 流套接字调用成员函数
• Send 和 Receive
– 数据报套接字调用成员函数
■ HTTP协议(应用层)
– 用于传送Web网页文件
网络基础知识
数据包的封装
TCP/IP模型
用户数据 HTTP首部 用户数据 应用程序
应用层
HTTP协议
TCP首部 HTTP首部 用户数据 IP首部 TCP首部 HTTP首部 用户数据
TCP协议 IP协议
传输层 互联层
以太网首部 IP首部 TCP首部 HTTP首部 用户数据 以太网尾部
TCP/IP协议
■ Windows的网络通信建立在TCP/IP
协议的基础上 ■ TCP/IP协议族包含一系列构成互联网 基础结构的网络协议 ■ TCP/IP字面上代表两个重要协议
– TCP: 传输控制协议 – IP: 网际协议
网络基础知识
TCP/IP参考模型
■ TCP/IP参考模型包括4层:
– 主机至网络层(Host-to-network) – 互联层(Internet) – 传输层(Transport) – 应用层(Application)
相关主题