ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
第十五章 MFC网络通讯 第一节 TCP/IP协议的层次 第二节 简单UDP通讯 第三节 简单TCP通讯 第四节 TCP通讯协议 第五节 UDP通讯协议 第六节 TCP的短连接模式 第七节 相关类库介绍(CAsyncSocket类、CSocket类) 1、TCP/IP协议:即传输控制(Transmission Control Protocol)和网络互联(Internet Protocol)协议,是Internet网络通讯的基础。每个连接在Internet上的主机,都分配的一个32位编号就是IP地址。就如同一条大街上每个大厦和房屋都有一个门牌号,这样邮递员才能按照门牌号将包裹准确送达。按照TCP/IP协议规定,32位IP地址用4个字节来表示。 例如:“192.168.1.100”。 2、通讯端口(PORT):在TCP/IP协议中计算机软件通讯必须依赖于通讯端口,端口号的范围从0到65535。每个进程启动后可以申请1个或多个的端口号,但在一台主机内每个端口号同时只能被一个进程占用,否则就会造成端口冲突。如果把网络中多台主机的IP地址比做是火车站的话,那么端口就是每个火车站的站台。如同要去北京的从4号站台上车,去深圳的从5号站台上车等一样,一台主机上QQ和360等软件分别使用不同的端口与服务器通讯。 3、TCP/IP协议层次架构: a)从整体架构上TCP/IP协议分为四个层次:网络接口层、网络层、传输层和应用层; b)TCP/IP协议也可以再细分为OSI七层结构,包括:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。 c)在计算机网络产生之初,每个计算机厂商都有一套自己的网络体系结构的概念,它们之间互不相容。国际标准化组织(ISO)在1979年建立了一个分委员会,为此专门研究出一种开放互连的体系结构,即OSI(Open Systems Interconnection)。 d)TCP/IP协议与OSI七层结构对照表: TCP/IP结构 OSI七层结构 应用层 应用层、表示层、会话层 主机到主机层(TCP)(又称传输层) 传输层 网络层(IP)(又称互联层) 网络层 网络接口层(又称链路层) 数据链路层、物理层 e)TCP/IP协议族: **OSI七层结构** 功能 TCP/IP协议族 应用层(Aplication) 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet等等 表示层(Presentation) 数据格式化,代码转换,数据加密 没有子协议 会话层(Session) 解除或建立与别的接点的联系 没有子协议 传输层(Transport) 提供端对端的接口 TCP,UDP 网络层(Network) 为数据包选择路由 IP,ICMP,OSPF,EIGRP,IGMP,RIP 数据链路层(DataLink) 传输有地址的帧以及错误检测功能 SLIP,CSLIP,PPP,MTU,ARP,RARP 物理层(Physical) 以二进制在物理媒体上传输数据 ISO2110,IEEE802,IEEE802.2 4、TCP和UDP协议: a)TCP的通讯过程比UDP复杂的多,必须依据C/S架构基础进行开发,一般TCP通讯软件都分为服务端和客户端两部分; b)TCP服务器端由1个侦听Socket和多个用于应答Socket组成,每个应答Socket与客户端建立一对一的数据流通道; c)客户端程序只包含一个连接Socket,它在成功连接服务器后与某一个应答Socket进行一对一的数据通讯。 5、TCP(Send)和UDP协(SendTo)议: a)TCP是稳定传输一般没有数据丢失,除非网络断开。 b)TCP的通讯过程比UDP复杂的多,必须依据C/S架构基础进行开发,一般TCP通讯软件都分为服务端和客户端两部分; c)TCP服务器端由1个侦听Socket和多个用于应答Socket组成,每个应答Socket与客户端建立一对一的数据流通道; d)客户端程序只包含一个连接Socket,它在成功连接服务器后与某一个应答Socket进行一对一的数据通讯。 UDP: a)发送出去的数据报文可能丢失,尤其在互联网中丢包率较高; b)UDP是无连接通讯:直接指定IP地址和端口随时,朝向任何主机和端口发送; c)一般不分服务器和客户端,例如局域网的通讯软件; 6、对比数据收发与文件读写: a)CSocket类调用Create和Close创建和关闭Socket句柄(套接字),CFile类调用Open和Close函数打开和关闭文件; b)CSocket类在发送数据时调用Send或SendTo函数,代入指定内存缓冲区地址和发送长度交由操作系统执行发送; (代入的发送长度根据实际需要发送数据的长度,尽量节约带宽) c)CFile类在对文件写入数据时调用Write函数,代入指定内存缓冲区地址和存储长度交由操作系统执行写入; d)CSocket类在接收数据时调用Receive或ReceiveFrom函数,代入预先分配好内存缓冲区地址和大小; (缓冲区的大小要根据实际需要尽量足够,一般在256-2096 Bytes之间); e)CFile类在读取数据时调用Read函数,代入预先分配好内存缓冲区地址和大小(长度是缓冲区申请长度);