已阅读5页,还剩53页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章Linux网络编程 TCP IP协议概述网络基础编程网络高级编程实验 TCP IP协议概述 OSI参考模型及TCP IP参考模型TCPUDP协议的选择 OSI参考模型及TCP IP参考模型 OSI参考模型及TCP IP参考模型 负责应用程序的网络访问 通过端口号来识别各个不同的进程 负责端对端之间的通信会话连接与建立 传输协议的选择根据数据传输方式而定 负责将数据帧封装成IP数据包 并运行必要的路由算法 负责将二进制流转换为数据帧 并进行数据帧的发送和接收 数据帧是独立的网络信息传输单元 TCP TCP 传输控制协议 为应用程序提供可靠的通信连接 建立一次连接需三次握手 适合于一次传输大批数据的情况 UDP UDP 用户数据报协议 是一种无连接协议 不需要像TCP那样通过三次握手来建立一个连接 同时 一个UDP应用可同时作为客户方或服务器方 UDP比TCP能更好地解决实时性的问题 包括网络视频会议系统在内的众多的客户 服务器模式的网络应用都使用UDP协议 协议的选择 1 对数据可靠性的要求高可靠性要求的应用需选择TCP协议 如验证 密码字段的传送都是不允许出错的 而对数据的可靠性要求不那么高的应用可选择UDP传送 2 应用的实时性TCP协议在传送过程中要使用三次握手 重传确认等手段来保证数据传输的可靠性 使用TCP协议会有较大的时延 因此不适合对实时性要求较高的应用 如VOIP 视频监控等 相反 UDP协议则在这些应用中能发挥很好的作用 3 网络的可靠性由于TCP协议的提出主要是解决网络的可靠性问题 它通过各种机制来减少错误发生的概率 因此 在网络状况不是很好的情况下需选用TCP协议 如在广域网等情况 在网络状况很好的情况下 如局域网等 应选择UDP协议来减少网络负荷 第10章Linux网络编程 TCP IP协议概述网络基础编程网络高级编程实验 网络基础编程 socket概述socket概念Socket相关数据结构字节顺序转化地址格式转化名字地址转化socket编程基础函数说明函数格式协议流程 socket概念 在Linux中的网络编程是通过socket接口来进行的 socket是一种特殊的I O接口 它也是一种文件描述符 是一种常用的进程之间通信机制 通过它不仅能实现本地机器上的进程之间的通信 而且能够实现不同机器上的进程之间的通信 Socket相关数据结构 structsockaddr unsignedshortsa family 协议族 charsa data 14 协议地址 包含该socket的IP地址和端口号 structsockaddr in shortintsa family 协议族 unsignedshortintsin port 端口号 structin addrsin addr IP地址 unsignedcharsin zero 8 填充0以保持与structsockaddr同样大小 协议族 字节顺序转化 计算机数据存储有两种字节优先顺序 高位字节优先 大端模式 和低位字节优先 小端模式 Internet上数据以高位字节优先顺序在网络上传输 因此在有些情况下 需要对这两种字节顺序进行转化 下列函数分别实现网络字节序和主机字节序的转化 其中 h代表host n代表network s代表short l代表long htons 主机字节序到网络字节序的转化 16位 ntohs 网络字节序到主机字节序的转化 16位 htonl 主机字节序到网络字节序的转化 32位 tohl 网络字节序到主机字节序的转化 32位 地址格式转化 1 用户在表达地址时采用的是点分十进制表示的数值 而在socket编程中所使用的则是二进制值 这就需要将这两个数值进行转换 IPv4和IPv6兼容的格式转化函数有 inet pton 点分十进制转换化为二进制inet ntop 二进制换化为点分十进制转 点分十进制转换化为二进制 地址格式转化 2 二进制换化为点分十进制转 名字地址转化 1 下列函数可以实现IPv4和IPv6的地址和主机名之间的转化 gethostbyname 将主机名转化为IP地址gethostbyaddr 将IP地址转化为主机名 structhostent char h name 正式主机名 char h aliases 主机别名 inth addrtype 地址类型 inth length 地址字节长度 char h addr list 指向IPv4或IPv6的地址指针数组 名字地址转化 2 structaddrinfo intai flags AI PASSIVE AI CANONNAME intai family 地址族 intai socktype socket类型 intai protocol 协议类型 size tai addrlen 地址字节长度 char ai canonname 主机名 structsockaddr ai addr socket结构体 structaddrinfo ai next 下一个指针链表 getaddrinfo 自动识别IPv4地址和IPv6地址 名字地址转化 3 将主机名转化为IP地址 名字地址转化 4 网络基础编程 socket概述socket概念Socket相关数据结构字节顺序转化地址格式转化名字地址转化socket编程基础函数说明函数格式协议流程 函数说明 1 socket 用于建立一个socket连接 bind 用于将本地IP地址绑定到端口号 主要用于TCP的连接 在UDP的连接中不用 listen 用于创建一个等待队列 在其中存放未处理的客户端连接请求 accept 用于等待并接收客户端的连接请求 它通常从等待队列中取出第一个未处理的连接请求 函数说明 2 connect 在TCP中用于与服务器端建立连接 而在UDP中由于没有了bind 函数 因此用connect 有点类似bind 函数的作用 send 和recv 分别用于发送和接收数据 可以用在TCP中 也可以用在UDP中 sendto 和recvfrom 作用与send 和recv 类似 当用在TCP时 后面的几个与地址有关参数不起作用 作用等同于send 和recv 当用在UDP时 可以用在之前没有使用connect 的情况下 这两个函数可以自动寻找指定地址并进行连接 socket 函数 建立一个socket连接 bind 函数 将本地IP地址绑定到端口号 TCP listen 函数 创建一个等待队列 accept 函数 等待并接收客户端的连接请求 connect 函数 与服务器端建立连接 send 函数 recv 函数 sendto 函数 recvfrom 函数 TCP协议的流程图 UDP协议的流程图 server c definePORT4321 defineBUFFER SIZE1024 defineMAX QUE CONN NM5intmain structsockaddr inserver sockaddr client sockaddr intsin size recvbytes intsockfd client fd charbuf BUFFER SIZE 建立socket连接 if sockfd socket AF INET SOCK STREAM 0 1 perror socket exit 1 printf Socketid d n sockfd server sockaddr sin family AF INET server sockaddr sin port htons PORT server sockaddr sin addr s addr INADDR ANY bzero if bind sockfd structsockaddr serverListening client c definePORT4321 defineBUFFER SIZE1024intmain intargc char argv intsockfd sendbytes charbuf BUFFER SIZE structhostent host structsockaddr inserv addr if argc 3 fprintf stderr USAGE clientHostname oripaddress Text n exit 1 地址解析函数 if host gethostbyname argv 1 NULL perror gethostbyname exit 1 memset buf 0 sizeof buf sprintf buf s argv 2 if sockfd socket AF INET SOCK STREAM 0 1 perror socket exit 1 serv addr sin family AF INET serv addr sin port htons PORT serv addr sin addr structin addr host h addr bzero client192 168 0 121Hello Server serverListening ReceivedamessageHello Server 第10章Linux网络编程 TCP IP协议概述网络基础编程网络高级编程实验 网络高级编程 在实际情况中 人们往往遇到多个客户端连接服务器端的情况 由于之前介绍的如connet recv 和send 等都是阻塞性函数 如果资源没有准备好 则调用该函数的进程将进入睡眠状态 这样就无法处理I O多路复用的情况了 本节给出了两种解决I O多路复用的解决方法 这两个函数都是之前学过的fcntl select fcntl 函数fcntl 针对socket编程提供了如下的编程特性 非阻塞I O 可将cmd设置为F SETFL 将lock设置为O NONBLOCK 异步I O 可将cmd设置为F SETFL 将lock设置为O ASYNC net fcntl c include include include include include include include include include include include include definePORT1234 defineMAX QUE CONN NM5 defineBUFFER SIZE1024 intmain structsockaddr inserver sockaddr client sockaddr intsin size recvbytes flags intsockfd client fd charbuf BUFFER SIZE if sockfd socket AF INET SOCK STREAM 0 1 perror socket exit 1 server sockaddr sin family AF INET server sockaddr sin port htons PORT server sockaddr sin addr s addr INADDR ANY bzero inti 1 使得重复使用本地地址与套接字进行绑定 setsockopt sockfd SOL SOCKET SO REUSEADDR while 1 sin size sizeof structsockaddr in if client fd accept sockfd structsockaddr net fcntlListening accept Resourcetemporarilyunavilable serverListening select 使用fcntl 函数虽然可以实现非阻塞I O或信号驱动I O 但在实际使用时往往会对资源是否准备完毕进行循环测试 这样就大大增加了不必要的CPU资源的占用 在这里可以使用select 函数来解决这个问题 同时 使用select 函数还可以设置等待的时间 可以说功能更加强大 示例阅读并运行10 3 2 net select c definePORT4321 defineMAX QUE CONN NM5 defineMAX SOCK FDFD SETSIZE defineBUFFER SIZE1024 intmain structsockaddr inserver sockaddr client sockaddr intsin size count fd setinset tmp inset intsockfd client fd fd charbuf BUFFER SIZE if sockfd socket AF INET SOCK STREAM 0 1 perror socket exit 1 server sockaddr sin family AF INET server sockaddr sin port htons PORT server sockaddr sin addr s addr INADDR ANY bzero while 1 tmp inset inset sin size sizeof structsockaddr in memset buf 0 sizeof buf 调用select函数 if select MAX SOCK FD else 处理从客户端发来的消息 if count recv fd buf BUFFER SIZE 0 0 printf Receivedamessagefrom d s n fd buf else close fd FD CLR fd client c include include include include include include include include include definePORT4321 defineBUFFER SIZE1024 intmain intargc char argv intsockfd sendbytes charbuf BUFFER SIZE structhostent host structsockaddr inserv addr if argc 3 fprintf stderr USAGE clientHostname oripaddress Text n exit 1 地
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026及未来5年中国慢回弹腰垫市场现状数据分析及前景预测报告
- 《汽车空调制冷系统》课件
- 人教版二年级语文下册《难忘的泼水节》课件
- 食品厂酸奶生产办法
- GADSL 全球汽车申报物质清单审核检查表 2026 版 含材料申报 IMDS 填报要点
- 医用有机化学第11章胺
- (2026版)师德师风建设的工作总结
- (2026版)十八项医疗护理核心制度宣传课件
- 小学科学实验教学实施方案
- 消防设施工程监理实施细则
- 2026年四川省拟任乡科级领导干部任职资格试题及参考答案
- 中铝集团竞聘笔试题库及答案
- 小学三年级综合实践活动课“合理安排课间十分钟”教学设计
- 2026年高校审计处岗招聘笔试真题附答案
- 2026年河南中医药大学单招职业适应性测试题库及答案
- 藤本植物种植施工工艺及施工方法
- 供配电技术教学课件641
- 告别偏科困境:科学方法与实战策略
- 消毒液MSDS安全使用说明范本
- DB1306∕T 301-2025 供水智慧服务标准
- 食品用洗涤剂产品生产许可证实施细则2025
评论
0/150
提交评论