![UNIX网络编程.ppt_第1页](http://file1.renrendoc.com/fileroot2/2020-1/20/c28f2cf4-169d-4db4-b099-b5b5e5c55018/c28f2cf4-169d-4db4-b099-b5b5e5c550181.gif)
![UNIX网络编程.ppt_第2页](http://file1.renrendoc.com/fileroot2/2020-1/20/c28f2cf4-169d-4db4-b099-b5b5e5c55018/c28f2cf4-169d-4db4-b099-b5b5e5c550182.gif)
![UNIX网络编程.ppt_第3页](http://file1.renrendoc.com/fileroot2/2020-1/20/c28f2cf4-169d-4db4-b099-b5b5e5c55018/c28f2cf4-169d-4db4-b099-b5b5e5c550183.gif)
![UNIX网络编程.ppt_第4页](http://file1.renrendoc.com/fileroot2/2020-1/20/c28f2cf4-169d-4db4-b099-b5b5e5c55018/c28f2cf4-169d-4db4-b099-b5b5e5c550184.gif)
![UNIX网络编程.ppt_第5页](http://file1.renrendoc.com/fileroot2/2020-1/20/c28f2cf4-169d-4db4-b099-b5b5e5c55018/c28f2cf4-169d-4db4-b099-b5b5e5c550185.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、UNIX网络编程,精灵进程、守候进程(daemon) 交易型中间件 网络编程,精灵进程、守候进程,精灵进程(daemon),也叫守候进程,是生存期长的一种进程。它们常常在系统引导装入时起动,在系统关闭时终止。因为它们没有控制终端,所以说它们是在后台运行的。 UNIX系统有很多精灵进程,它们执行日常事物活动: init:初始化进程; bdflush:块设备的定期同步; kswapd:负责交换管理 syslogd:记录系统中的登录信息; xinetd:所有(网络)服务进程的守候; cron:负责进程的定期或定时执行。,精灵进程的特征与编程规则,生命期无限长,在系统引导装入时起动,在系统关闭时终止。
2、 没有控制终端,所以说它们是在后台运行的。,客户机/服务器(C/S)模型,一般而言,服务器是一个进程,它等待客户机与其联系,提出某种类型的服务要求。 C/S模式在操作过程中采取的是主动请求方式。 服务对客户机服务可将结果或信息返回给客户机(双向),也可不返回(单向)。 就双向C/S来讲,又分为重复型和并发型两种。 在网络编程中,一般来说,TCP服务器是并发的,而UDP服务器是重复的。,C/S模型,Server,Client_n,Client_1, ,重复型,重复型服务器通过以下步骤进行交互: (1)打开一通信通道并告知本地主机,它愿意在某一公认地址端口上接收客户请求。 (2)等待一个客户请求的
3、到来; (3)处理客户请求; (4)将服务结果数据发送给请求的客户; (5)返回步骤(2) 重复型服务器主要的问题发生在第(3)步。在这期间,它不能接收其它客户请求,因而不能为其他客户机提供服务。,并发型,并发型服务器采用以下步骤进行交互: (1)打开一通信通道并告知本地主机,它愿意在某一公认地址端口上接收客户请求。 (2)等待一个客户请求的到来; (3)启动一个新的服务器来处理这个客户的请求。 启动一个新的服务器的方法可能不同,可能是生成一个新的进程或线程,这依赖于所使用的操作系统或开发系统的支持。新生成的服务器对客户的全部请求进行处理。处理完毕后,终止这个新服务器。 (4)返回步骤(2)
4、并发服务器的优点在于它是利用生成其他服务器的方法来处理客户的请求。它可以同时并发地为多个客户机服务。,客户方,(1)打开一通信通道,并连接到服务器所在主机的特定端口。 (2)向服务器发服务请求,等待并接收应答; (3)请求结束后关闭通信通道。,交易型中间件,在中间件诞生之前,多采用传统C/S二层结构。这种二层结构是计算机及软件技术发展的一大进步。 虽然它带来了相当的灵活性,但也逐渐暴露出其客户端和服务器端负担过重的现象,并且拓展性也较差,无法跨越不同的业务部门和业务系统。 这不仅表现在技术上有难度,更重要的是在制度和安全方面。于是,三层结构出现了。,三层结构,所谓三层结构,就是在原有的两层结构
5、之间,增加一个中间层。该中间层既包括服务也包括请求。 服务包括事务处理应用服务和数据库查询代理等,对于更多实时业务系统而言,该层的主要作用是通讯转发、协议转换和安全控制; 请求主要表现在当需要跨越不同业务系统和业务部门时,根据实际业务的需要,再以C/S方式向对方或目的方提出请求,当服务信息返回后,再将自己的客户请求的应答信息返回给自己的客户,这才是实现中间件的真正目的。 两层结构向三层结构转变后,中间件可分担部分客户端和服务端的工作量,因此客户端和服务器端的负载就相应减轻了。最关键的是中间件的引入实现了跨平台、跨业务部门的服务和传输,解决了信息传输不可靠和部门、企业间的安全控制等问题。,中间件
6、工作机制,中间件,从本质上是对分布式应用的抽象,它抛开了与应用相关的业务的细节,保留了典型的分布交互模式的关键特征,将纷繁复杂的分布式系统经过提炼和必要的隔离后,以统一的层面形式呈现给应用。 中间件在整个分布式系统中起数据总线的作用,将各种异构系统通过中间件有机地结合成一个整体。 它的工作机制是:当客户端上的应用程序需要从网络中某个节点处获取一定的数据或服务时,这些数据和服务可能处于一个运行着和客户端不同的硬、软件、网络或操作系统的平台上。C/S应用程序中负责寻找数据的部分只需访问一个中间件系统,由中间件完成到网络中找到数据源或服务,进而实现传输客户请求、重组答复信息,最后将结果送回应用程序的
7、任务。,中间件模型,MiddleWare,Server_1, ,Client_1,Client_n,Server_m, ,中间件的种类,1.消息中间件 :主要功能是在不同的网络协议、不同的操作系统和不同的应用程序之间提供可靠的消息传送。 2.交易中间件 :负责正确传递交易,对交易完整性进行管理,调度应用程序的运行,保证整个系统运行的高效性。 3.对象中间件 :它类似于软总线,解决面向对象、数据一致性、应用集成等关键任务的需求。 4.安全平台 :以公钥基础设施(PKI)为核心、建立在一系列相关国际安全标准之上的一个开放式应用开发平台。它向上为应用系统提供开发接口,向下提供统一的密码算法接口及各种
8、IC卡、安全芯片等设备的驱动接口。 5.数据库中间件:ODBC。,socket的引入,socket程序库是UNIX网络上最普及的API,可调用socket程序库提供的各个程序开发网络软件和网络系统。 TCP/IP协议被集成到UNIX内核中时,相当于在UNIX系统引入了一种新型的I/0操作。UNIX用户进程与网络协议的交互作用比用户进程与传统的I/O设备相互作用复杂得多。 在UNIX系统中,网络应用编程界面有两类:UNIX BSD的套接字(socket)和UNIX System V的TLI。由于Sun公司采用了支持TCP/IP的UNIX BSD操作系统,使TCP/IP的应用有更大的发展,其网络应
9、用编程界面(套接字)在网络软件中被广泛应用。,套接字类型,流式套接字(SOCK-STREAM):提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复地发送,且按发送顺序接收。内设流量控制,避免数据流超限;数据被看作是字节流,无长度限制。文件传送协议(FTP)即使用流式套接字。 数据报式套接字(SOCK-DGRAM) :提供了一个无连接服务。数据包以独立包形式被发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱。 原始式套接字(SOCK-RAW) :该接口允许对较低层协议,如IP、ICMP直接访问。常用于检验新的协议实现或访问现有服务中配置的新设备。,基本套接字系统调用,创建套接字
10、socket() 地址绑定bind() 建立连接connect()与accept() 监听连接listen() 数据传输send()/write()与recv()/read() 关闭套接字close(),创建套接字socket(),应用程序在使用套接字前,必须拥有一个套接字,系统调用socket()向应用程序提供创建套接字的手段。其调用格式如下: #include int socket(int domain, int type, int protocol); 该调用要接收3个参数,根据这3个参数建立一个套接字,并将相应的资源分配给它,同时返回一个整型套接字号,只和一个特定的协议相联系。实际上指
11、定了相关五元组中的“协议”这一元。 domain(协议族):AF_INET,AF_UNIX,AF_IPX, type(类型):SOCK_STREAM,SOCK_DGRAM protocol(协议):0-让系统使用指定类型和协议族上的默认协议。,绑定本地地址bind(),当一个套接字用socket()创建后,存在一个名字空间(地址族),但它没有被命名,bind()将套接字地址(包括本地主机地址和本地端口地址)与所创建的套接字号绑定起来,即将名字赋予套接字,以指定本地半相关。其调用格式如下: #include int bind(int sockfd,const struct sockaddr *m
12、y_addr, int addrlen); 说明: sockfd:为socket成功时的返回值套接字描述符。 my_addr为本方地址数据结构。 addrlen=sizeof(my_addr).,监听连接listen(),此调用用于面向连接服务器,表明它愿意接收连接。1isten()需在accept()之前调用,其调用格式如下: #include int listen(int s,int backlog); listen()在执行调用过程中可为没有调用过bind()的套接字s完成所必需的连接,并建立长度为backlog的请求连接队列。 backlog定义最大长度的socket等待队列。默认值为
13、5.,connect(),accept(),这两个系统调用用于完成一个完整相关的建立,其中connect()用于客户建立连接。accept()用于使服务器等待来自某客户进程的实际连接。 connect:客户方调用发出的请求 int connect(int sockfd,const structct sockaddr * server_addr, socklen_t addrlen); 在面向连接的协议中,该调用导致本地系统和外部系统之间连接实际建立。 accept:服务器调用,从等待从编号为s的套接字上接受客户连接请求 int accept(int s, struct sockaddr *ad
14、dr, socklen_t addrlen); accept()用于面向连接服务器。,connect与accept的说明,调用accept()后,服务器等待从编号为s的套接字上接受客户连接请求,连接请求是由客户方的connect()调用发出的。 当有连接请求到达时,accept()调用将请求连接队列上的第一个客户方套接字地址及长度放入addr和addrlen,并创建一个与s有相同特性的新套接字号。 新的套接字可用于处理服务器并发请求。,数据传输:send()/write与recv()/read(),当一个连接建立以后,就可以传输数据了。常用的系统调用有send()和recv()。send()调
15、用用于在参数s指定的已连接的数据报或流套接字上发送输出数据,格式如下: int send(int s,void *buf,int len,int flags); int recv(int s,void *buf,int len,int flags); recv/send可由文件系统调用read/write所取代。 在处理二进制数据处理时,后者优于前者。,关闭套接字:close(),close()关闭套接字s,并释放分配给该套接字的资源;如果s涉及一个打开的TCP连接,则该连接被释放。 close()的调用格式如下: int close(int s);,字节顺序,网络字节顺序:TCP/IP使用大
16、端字节来传输协议信息。 大端(尾)数(big-endian)把高位字节放在低地址,而小尾(端)数(little-endian)则把高位字节存放在高地址空间。 需要在机器字节顺序与网络字节顺序转换的可使用下列函数: unsignd int htonl(unsigned int hostlong) unsignd short htons(unsigned int hostshort) unsignd int nhtonl(unsigned int netlong) unsignd int nhtons(unsigned int netshort) 前两个是正向的,后两者是反向的。这时里的“长整数”
17、指的是32位,而不是C语言的长整数。,地址转换,应用程序常常需要在点分十进制的IP与二进制形式IP间的转换。 以下函数可以实现这种转换: #include #include #include int inet_aton(const char *ddaddress, struct in_addr *adress) char *inet_ntoa(struct in_addr address); unsigned long int inet_addr(const char *ddaddress);,主机信息及相关数据结构和函数,struct hostent char*h_name;/ Offici
18、al name of host char*h_aliases;/ Alias list. inth_addrtype;/ Host address type inth_length;/ Length of address char*h_addr_list;/ List of addrs from NS ; 参见netdb.h,主机信息及相关数据结构和函数,#include struct hostent *gethostbyname(const char *name) name:为主机名。可以是域名,也可在/etc/hosts中定义。 struct hostent *gethostbyadress(const char *addr, int len, int type) addr::是一个指向in_addr的结构(见netinet/in.h); len指明addr的长度; type:对于SCOK_STREAM,type为AF_INET。,服务器端相关的数据结构和函数,struct servent char*s_name;/ Official service name. char*s_aliases;/ Alias list. ints_port;/ Port number. char*s_proto;/ Protocol to use.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生产流程优化基于数据的决策支持方案
- 珠宝鉴定与法律法规关系解析
- 2023九年级化学下册 第九章 现在生活与化学9.4 化学物质与健康第3课时 治病用的药品、防范有害化学物质、保护身体健康说课稿 科粤版
- Unit1 Making friends Part A Letters and sounds(说课稿)-2024-2025学年人教PEP版(2024)英语三年级上册
- 3 学习有方法 说课稿-2024-2025学年道德与法治三年级上册统编版
- Unit 3 Fascinating parks Discover Useful Structures 说课稿 -2024-2025学年高中英语人教版(2019)选择性必修第一册
- 《2 拉拉手交朋友》说课稿-2023-2024学年道德与法治一年级上册统编版
- 2023六年级数学上册 三 分数除法 1分数除法第1课时 倒数的认识说课稿 西师大版
- 2023三年级数学上册 六 年、月、日第1课时 认识年月日说课稿 西师大版
- 16海上日出J说课稿-2023-2024学年四年级下册语文统编版
- 小学六年级数学上册《简便计算》练习题(310题-附答案)
- 地理标志培训课件
- 2023行政主管年终工作报告五篇
- 2024年中国养老产业商学研究报告-银发经济专题
- 培训如何上好一堂课
- 高教版2023年中职教科书《语文》(基础模块)下册教案全册
- 人教版英语七年级上册阅读理解专项训练16篇(含答案)
- 砌墙砖和砌块检测作业指导书
- 护理教学查房评分标准
- GB/T 23505-2017石油天然气工业钻机和修井机
- 人工智能发展史课件
评论
0/150
提交评论