C语言_第16章_第1页
C语言_第16章_第2页
C语言_第16章_第3页
C语言_第16章_第4页
C语言_第16章_第5页
免费预览已结束,剩余31页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十六章网络编程 第十六章网络编程 16 1计算机网络基础16 2套接字概述16 3套接字函数16 4实战练习 本章学习内容 16 1计算机网络基础 16 1 1osi七层参考模型开放系统互联参考模型为实现开放系统互连所建立的通信功能分层模型 简称osi参考模型 目的是为异种计算机互连提供一个共同的基础和标准框架 并为保持相关标准的一致性和兼容性提供共同的参考这里所说的开放系统实质上指的是遵循osi参考模型和相关协议能够实现互连的具有各种应用目的的计算机系统 16 1 1osi七层参考模型 第7层应用层 负责网络中应用程序与网络操作系统之间的联系第6层表示层 用于确定数据交换的格式 负责设备之间所需要的字符集和数据转换第5层会话层 建立与其他设备的连接 对会话进行有效的管理第4层传输层 提供会话层和网络层之间的传输服务 16 1 1osi七层参考模型 第3层网络层 将传输的数据封包 通过路由选择 分组组合等控制 将信息从源设备传送到目的设备第2层数据链路层 修正传输过程中的错误信号 提供可靠的通过物理介质传输数据的方法第1层物理层 提供物理连接 规范网络硬件的特性 规格和传输速度 16 1 2ip地址 计算机之间通过计算机网络进行通信 通信双方的计算机需要将信息准确地送达对方 需要使网络上的计算机能够识别对方 所以每台计算机需要一个地址来标识自己 这个地址就是ip地址ip地址是ip协议提供的一种统一的地址格式 由32位的二进制数表示最新的ipv6协议将ip地址的位数上升到128位 16 1 2ip地址 32位ip地址由4个 8位二进制数 构成 通常使用 点分十进制 表示ip地址主要分为前缀和后缀部分 前缀表示计算机所属的物理网络 属于网络地址 后缀表示当前网络地址中的主机地址根据网络号的不同 ip地址分为5类 a类 b类 c类 d类和e类 16 1 2ip地址 16 1 2ip地址 特殊的ip地址1 网络地址 主机地址全为0的ip地址表示网络地址 如128 111 0 02 广播地址 主机地址全为1的ip地址表示广播地址 如128 111 255 2553 回送地址 127 0 0 1表示回送地址 用于测试 16 1 3网络地址解析 物理地址又称为媒体访问控制地址 mac 地址解析是将计算机的协议地址解析为物理地址 在网络上通常由地址解析协议 arp 来实现地址解析arp协议是在主机arp高速缓存中存放ip地址到物理地址的映射表 通过查找映射表找到ip地址对应的物理地址 16 1 3网络地址解析 假设主机a和主机b处于同一个物理网络上 a的ip地址为 192 168 31 2 b的ip地址为 192 168 31 1 arp协议解析过程 1 主机a从本地arp缓存中查找192 168 31 1对应的物理地址2 如果a的arp缓存中没有找到 则发送arp请求到本地网络上的所有主机 请求中包含主机b的ip地址 主机a的物理地址和ip地址3 其他主机收到arp请求后 将b的ip地址与自己的ip地址进行匹配 匹配不成功 丢弃该请求 匹配成功 添加a的ip地址和物理地址到arp缓存中 然后将b的ip地址和物理地址发给a4 a收到arp的回包后 更新自己的缓存 16 1 4域名系统 ip地址不容易记忆 所以网络上使用主机名来标识ip地址 称为域名例如 其中 主机名www 域名 com是一级域名 表示商业组织 microsoft为本地域名 16 1 4域名系统 利用域名进行不同主机间的通信 需要将域名解析为ip地址 这个解析过程称为域名解析 dns 域名解析通过域名服务器查询域名对应的ip地址1 递归查询 主机本地域名服务器不知道被查询域名的ip地址 那么本地域名服务器就以dns客户身份 向其他根域名继续发送查询域名报文 而不是让该主机自己进行下一步的查询2 迭代查询根域名服务器收到本地域名服务器发送的迭代查询请求报文时 要么给出所要查询的域名对应的ip地址 要么告诉本地域名服务器下一步应该向哪个域名服务器进行查询 16 1 5tcp ip协议 tcp ip能够实现互联网上不同类型操作系统的计算机相互通信 它将网络分为4层 分别对应osi参考模型的7层结构 16 1 5tcp ip协议 1 tcp协议提供可靠数据传输的通用协议 在发送数据时 应用层的数据传输到传输层 加上tcp的首部 数据就构成了报文2 ip协议又称为网际协议 工作在网络层 提供无连接数据报传输 16 1 5tcp ip协议 3 icmp协议网际控制报文协议 负责网络上设备状态的发送和报文检查 可以将某个设备的故障信息发送到其他设备上4 udp协议面向无连接的协议 为应用程序提供一次性的数据传输服务不提供差错恢复 数据重传 安全性略差 16 1 5tcp ip协议 tcp ip协议提出了端口的概念 用于标识通信的应用程序 当应用程序a与某个端口p绑定后 系统会将收到的发送给p端口的数据发送给应用程序a端口用一个16位的无符号整数值表示 范围为0 65535低于256的端口号被作为系统的保留端口 用于系统进程通信 不在这一范围的端口号称为自由端口 由应用程序自由使用 16 1 6网络字节顺序 不同的计算机存放多字节数据的顺序是不同的 按照存放顺序的不同分为两种模式 低位地址存放数据的低位字节 称为小端模式 低位地址存放数据的高位字节 称为大端模式 16 1 6网络字节顺序 例如 双字节数0 x0001的小端模式存储和大端模式存储 16 1 6网络字节顺序 说明不同cpu的字节顺序是不同的 这就导致网络数据传输两端的计算机可能会使用字节顺序不同的cpu 当使用小端模式的计算机发送数据后 接收到数据的计算机把数据当作大端模式处理 就会发生错误 为了保证数据的正确性 在网络协议中需要指定网络字节顺序 tcp ip协议使用大端模式的字节顺序 这样在发送数据时 将数据字节顺序转换成统一的网络字节顺序 再进行传输 而接收端接收到数据后 再将网络字节顺序转换成自己需要的字节顺序 16 2 1套接字概述 所谓套接字 实际上使一个指向传输提供者的句柄 在winsock中 就是通过句柄来实现网络通信和管理的 根据性质和作用的不同 套接字可以分为原始套接字 流式套接字和数据包套接字3种 16 2 2tcp的套接字的socket编程 基于tcp面向连接的socket编程服务端程序流程1 创建套接字socket2 将创建的套接字绑定 bind 到本地的地址和端口上3 设置套接字的状态为监听状态 listen 准备接收客户端的连接请求4 接收请求 accept 同时返回一个新的用于连接的套接字5 使用新的套接字进行通信 send recv 6 通信完毕 释放套接字资源 closesocket 16 2 2tcp的套接字的socket编程 基于tcp面向连接的socket编程的客户端程序流程1 创建套接字socket2 使用创建的套接字 向服务器发送连接请求 connect 3 请求连接成功后 与服务器进行通信 send recv 4 释放套接字资源 closesocket 16 2 2tcp的套接字的socket编程 说明服务端建立套接字后 需要将建立的套接字绑定到指定的主机ip和端口上等待客户端的请求 当客户端建立套接字 发起连接请求时 需要指定对方服务器的主机ip和端口 而服务端接收到连接请求并被接受后 就保存了该客户端的ip地址和端口号的信息 这样服务端和客户端就知道了对方的ip地址和端口号 这样就可以利用这些信息进行通信了 16 2 3udp的套接字的socket编程 基于udp面向无连接的socket编程的接收端程序流程1 创建套接字socket2 将创建的套接字绑定 bind 到一个本地ip地址和端口号3 等待接收数据 recvfrom 4 释放套接字资源 closesocket 16 2 3udp的套接字的socket编程 基于udp面向无连接的socket编程的发送端程序流程1 创建套接字socket2 使用创建的套接字向接收端发送数据 sendto 3 释放套接字资源 closesocket 16 2 3udp的套接字的socket编程 说明在基于udp的套接字编程中 还是需要使用bind 函数进行绑定 因为虽然面向无连接的socket编程无须建立连接 但是为了完成通信 首先应该启动接收端来接收发送端发送的数据 这样接收端就必须告诉发送端它的ip地址和端口号 这样才能接收信息 因此必须调用bind 函数将套接字绑定到一个本地ip地址和端口号 16 3 1套接字函数介绍 1 wsastartup 函数功能 初始化套接字 并进行版本协商原型 intwsastartup wordwversionrequested lpwsadataplwsadata 2 socket 函数功能 创建一个套接字原型 socketsocket intaf inttype intprotocol 16 3 1套接字函数介绍 3 bind 函数功能 将套接字绑定到指定的ip地址和端口上原型 intbind sockets conststructsockaddrfar my addr intlen 4 listen 函数功能 将套接字设置为监听模式原型 intlisten sockets intbacklog 16 3 1套接字函数介绍 5 accept 函数功能 接收客户端的连接原型 socketaccept sockets structsockaddrfar addr intfar len 6 closesocket 函数功能 关闭套接字 释放套接字资源原型 intclosesocket sockets 16 3 1套接字函数介绍 7 connect 函数功能 发送一个连接请求原型 intconnect sockets conststructsockaddrfar name intlen 8 htons 函数功能 关闭套接字 释放套接字资源原型 u shorthtons u shorthostshort 16 3 1套接字函数介绍 9 htonl 函数功能 将一个无符号长整型数从主机字节顺序转换为网络字节顺序原型 u longhtonl u longhostlong 10 inet addr 函数功能 将一个由字符串表示的地址转换为32位的无符号长整型数原型 unsignedlonginet addr constcharfar cp 16 3 1套接字函数介绍 11 recv 函数功能 从面向连接的套接字中接收数据原型 intrecv sockets charfar buf intlen intflags 12 send 函数功能 在面向连接的套接字间发送数据原型 intsend sockets constcharfar buf intlen intflags 16 3 1套接字函数介绍 13 recvfrom 函数功能 接收一个数据报信息 并保存源地址原型 intrecvfrom sockets charfar buf intlen intflags structsockad

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论