版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
网络编程实用教程第2章套接字网络编程接口基础套接字网络编程接口的产生与发展过程套接字编程的基本概念面向连接的套接字编程无连接的套接字编程原始套接字2.1套接字网络编程接口的产生与发展套接字应用程序编程接口:网络应用程序通过网络协议栈进行通信时所使用的接口,即应用程序与协议栈软件之间的接口,简称套接字编程接口(SocketAPI)。加州大学伯克利(Berkley)分校开发并推广了BSDUNIX(BerkeleySoftwareDistributionUNIX)操作系统,套接字编程接口是这个操作系统的一个部分。由于这个套接字规范最早是由Berkeley大学开发的,一般将它称为BerkeleySockets规范。2.1.2套接字编程接口的起源与应用在操作系统的内核中增加相应的软件来实现。通过开发操作系统之外的函数库来实现。
2.1.3套接字编程接口的两种实现方式2.2套接字编程的基本概念图2.1电插座与电话插座的作用2.2.1什么是套接字(SOCKET)
套接口---是对网络中不同主机上应用进程之间进行双向通信的端点的抽象,一个套接口就是网络上进程通信的一端,提供了应用层进程利用网络协议栈交换数据的机制。图2.2应用进程、套接口、网络协议栈及操作系统的关系
2.2.2套接字的特点1.通信域
通信域---是为了处理一般的进程通过套接字通信而引入的一种抽象概念,套接字通常只和同一域中的套接字交换数据。2.套接字具有三种类型(1)数据报套接字(DatagramSOCKET)图2.3在Internet通信域中,数据报套接字基于UDP协议
(2)流式套接字(StreamSOCKET)图2.4在Internet通信域中,流式套接字基于TCP协议(3)原始式套接字(RAWSOCKET)原始式套接字允许对较低层次的协议,如IP、ICMP直接访问,用于检验新的协议的实现。3.套接字由应用层的通信进程创建,并为其服务4.使用确定的IP地址和传输层端口号(1)不管是采用对等模式或者客户机/服务器模式,通信双方的应用程序都需要开发。(2)双方所交换数据的结构和交换数据的顺序有特定的要求,不符合现在成熟的应用层协议,甚至需要自己去开发应用层协议,自己设计最适合的数据结构和信息交换规程。
2.2.3套接字的应用场合2.2.4套接字使用的数据类型和相关的问题1.三种表示套接字地址的结构(1)sockaddr结构,针对各种通信域的套接字,存储它们的地址信息。structsockaddr{unsignedshortsa_family;//地址家族charsa_data;//协议地址}
(2)sockaddr_in结构,专门针对Internet通信域,存储套接字相关的网络地址信息,例如IP地址,传输层端口号等信息。structsockaddr_in{shortintsin_family;//地址家族unsignedshortintsin_port;//端口号structin_addrsin_addr;//IP地址unsignedcharsin_zero[8];//全为0}
(3)in_addr结构,专门用来存储IP地址。Structin_addr{Unsignedlongs_addrl;}(4)这些数据结构的一般用法:structsockaddr_inmyad;memset(&myad,0,sizeof(structsockaddr_in));
myad.sin_family=AF_INET;myad.sin_port=htons(8080);myad.sin_addr.s_addr=htonl(INADDR-ANY);
accept(listenfd,(sockaddr*)(&myad),&addrlen);
2.本机字节顺序和网络字节顺序本机字节顺序---在具体计算机中的多字节数据的存储顺序。网络字节顺序---多字节数据在网络协议报头中的存储顺序。
网络应用程序要在不同的计算机中运行,本机字节顺序是不同的,但是,网络字节顺序是一定的。应用程序在编程的时候,在把IP地址和端口号装入套接字的时候,应当把它们从本机字节顺序转换为网络字节顺序;相反,在本机输出时,应将它们从网络字节顺序转换为本机字节顺序。
套接字编程接口特为解决这个问题设置了四个函数:htons()短整数本机顺序转换为网络顺序,用于端口号。htonl()长整数本机顺序转换为网络顺序,用于IP地址。ntohs()短整数网络顺序转换为本机顺序,用于端口号。ntohl()长整数网络顺序转化为本机顺序,用于IP地址。3.点分十进制的IP地址的转换在因特网中,IP地址常常用点分十进制的表示方法,但在套接字中,IP地址是无符号的长整型数,套接字编程接口设置了两个函数,专门用于两种形式的IP地址的转换。(1)inet-addr函数unsignedlonginet-addr(constchar*cp)入口参数cp:点分十进制形式的IP地址。返回值:网络字节顺序的IP地址,是无符号的长整数,(2)inet_ntoa函数char*inet_ntoa(structin_addrin)入口参数in:包含长整型IP地址的in_addr结构变量,返回值:指向点分十进制IP地址的字符串的指针。
通常,我们使用域名来标识站点,可以将文字型的主机域名直接转换成IP地址,structhostent*gethodtbyname(constchar*name);入口参数:是站点的主机域名字符串,返回值:是指向hostent结构的指针,4.域名服务2.3面向连接的套接字编程2.3.1套接字的工作过程图2.6监听套接字使用缓冲区接纳多个客户端的连接请求
2.3.4进程的阻塞问题和对策1.什么是阻塞阻塞是指一个进程执行了一个函数或者系统调用,该函数由于某种原因不能立即完成,因而不能返回调用它的进程,导致进程受控于这个函数而处于等待的状态,进程的这种状态称为阻塞。图2.8RECV()函数的两种执行方式
2.能引起阻塞的套接字调用
(1)ACCEPT()(2)READ()、RECV()和READFROM()(3)WRITE()、SEND()和SENDTO()(4)CONNECT()(5)SELECT()(6)CLOSESOCKET()
3.阻塞工作模式带来的问题图2.9采用阻塞工作模式的服务器不能很好地为多个客户服务
4.一种解决方案
利用UNIX操作系统的FORK()系统调用,编制多进程并发执行的服务器程序。可以创建子进程。对于每一个客户端,用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年山西省法检系统书记员招聘考试模拟试题及答案详解
- 2026年桂林市叠彩区中小学教师招聘考试备考题库及答案详解
- 2026年武汉市黄陂区中小学教师招聘考试模拟试题及答案详解
- 2026年广东省湛江市中小学教师招聘考试参考试题及答案详解
- 2025年赤峰市松山区街道办人员招聘笔试试题及答案详解
- 2026年省直辖行政单位神农架林区中小学教师招聘考试参考试题及答案详解
- 定西地区岷县2027届数学六年级第一学期期末监测模拟试题含解析
- 2025年广安市广安区中小学教师招聘笔试试题及答案详解
- 2026年激光加工专用设备市场发展分析
- 2025年昆明市西山区街道办人员招聘考试试题及答案详解
- 幼儿园保安考试试题及答案
- 煤矿班组长现场安全管控培训课件
- 四川省水电投资经营集团有限公司所属电力公司2026年员工公开招聘(221人)考试备考试题及答案详解
- LYT 3464-2026《退化草原免耕补播技术规程》(纯净版)
- 上海八年级上册数学-二次根式的乘法和除法 同步练习
- 胸痹常用中医护理技术详解
- 《方法系统论》教材
- 湖南钢铁集团秋招面试题及答案
- 《再生工业盐 氯化钠(征求意见稿)》
- 20220902 葛洲坝集团路桥公司恩施至广元国家高速公路万州至开江段B合同段桥梁工程专项风险评估报(苎溪河特大桥)附专家评审意见及执行情况 B标
- (2026年)肾功能不全患者护理课件
评论
0/150
提交评论