版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
南京邮电大学计算机学院计算机硬件基础教学中心第09章基于C_S结构的Socket程序设计网络编程技术
TechnologyofNetworkProgramming内容纲要C/S结构网络模型应用进程跨越网络的通信WindowsSocket编程时序图基本套接字API调用内容纲要C/S结构网络模型应用进程跨越网络的通信WindowsSocket编程时序图基本套接字API调用C/S结构网络模型C/S(Client/Server)结构,即客户和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现。B/S(Browser/Server)结构,即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过浏览器来实现,极少部分事务逻辑在前端(Browser)实现,主要事务在服务器端(Server)实现。C/S结构网络模型在TCP/IP的应用层协议使用的是
客户-服务器方式计算机的进程(process)就是指运行着的计算机程序。为解决具体应用问题而彼此通信的进程称为“应用进程”。应用层的具体内容就是规定应用进程在通信时所遵循的协议。客户机-服务器方式C/S结构网络模型客户(client)和服务器(server)都是指通信中所涉及的两个应用进程。客户-服务器方式所描述的是进程之间服务和被服务的关系。客户是服务请求方,服务器是服务提供方。客户和服务器C/S结构网络模型在进行通信时临时成为客户,但它也可在本地进行其他的计算。被用户调用并在用户计算机上运行,在打算通信时主动向远地服务器发起通信。可与多个服务器进行通信。不需要特殊的硬件和很复杂的操作系统。客户软件的特点C/S结构网络模型专门用来提供某种服务的程序,可同时处理多个远地或本地客户的请求。在共享计算机上运行。当系统启动时即自动调用并一直不断地运行着。被动等待并接受来自多个客户的通信请求。一般需要强大的硬件和高级的操作系统支持。服务器软件的特点C/S结构网络模型客户机-服务器通信过程数据链路层物理层运输层网络层数据链路层物理层运输层网络层①
客户发起连接建立请求②
服务器接受连接建立请求应用层应用层因特网客户服务器以后就逐级使用下层提供的服务(使用TCP和IP)C/S结构网络模型数据链路层物理层运输层网络层应用层计算机3服务器1服务器2数据链路层物理层运输层网络层应用层计算机1客户1数据链路层物理层运输层网络层应用层计算机2客户2因特网客户机-服务器通信过程内容纲要C/S结构网络模型应用进程跨越网络的通信WindowsSocket编程时序图基本套接字API调用应用进程跨越网络的通信大多数操作系统使用系统调用(systemcall)的机制在应用程序和操作系统之间传递控制权。对程序员来说,每个系统调用和一般程序设计中的函数调用非常相似,只是系统调用是将控制权传递给了操作系统。1、系统调用和应用编程接口系统调用应用进程跨越网络的通信1、系统调用和应用编程接口多个应用进程使用系统调用的机制应用程序1应用程序2应用程序n…由应用程序调用的系统函数用户地址空间中的应用程序系统调用接口系统地址空间中的协议软件包括TCP/IP协议软件的操作系统内核应用进程跨越网络的通信当某个应用进程启动系统调用时,控制权就从应用进程传递给了系统调用接口。此接口再将控制权传递给计算机的操作系统。操作系统将此调用转给某个内部过程,并执行所请求的操作。内部过程一旦执行完毕,控制权就又通过系统调用接口返回给应用进程。系统调用接口实际上就是应用进程的控制权和操作系统的控制权进行转换的一个接口,即应用编程接口API。1、系统调用和应用编程接口应用编程接口API应用进程跨越网络的通信BerkeleyUNIX操作系统定义了一种API,它又称为插口接口(socketinterface)。微软公司在其操作系统中采用了插口接口API,形成了一个稍有不同的API,并称之为WindowsSocket。AT&T为其UNIX系统V定义了一种API,简写为TLI(TransportLayerInterface)。1、系统调用和应用编程接口几种应用编程接口API应用进程跨越网络的通信当应用进程需要使用网络进行通信时就发出系统调用,请求操作系统为其创建“插口”。操作系统为这些资源的总和用一个号码来表示。应用进程所进行的网络操作都必须使用这个号码。通信完毕后,应用进程通过一个关闭插口的系统调用通知操作系统回收与该“号码”相关的所有资源。1、系统调用和应用编程接口插口的作用应用进程跨越网络的通信插口是应用进程和网络之间的接口,因为插口既包含有运输层与应用层之间的端口号,又包含有机器的IP地址。API是从程序设计的角度定义了许多标准的系统调用函数。应用进程只要使用标准的系统调用函数就可得到操作系统的服务。在这个意义上讲,API是应用程序和操作系统之间的接口。1、系统调用和应用编程接口插口和API不同应用进程跨越网络的通信在插口以上的进程是受应用程序控制的,而在插口以下TCP协议软件以及TCP使用的缓存和变量,是受计算机操作系统的控制。只要应用程序使用TCP/IP协议进行通信,必须通过插口与操作系统交互并请求其服务。应用程序开发者对插口以上的应用进程具有完全控制,但对插口以下运输层只有少量的控制。
1、系统调用和应用编程接口应当记住应用进程跨越网络的通信服务器都可工作在两种不同的方式:循环方式(iterativemode)——在计算机中一次只运行一个服务器进程。当有多个客户进程请求服务时,服务器进程就按请求的先后顺序依次做出响应。并发方式(concurrent)——在计算机中同时运行多个服务器进程,而每一个服务器进程都对某个特定的客户进程做出响应。2、服务器的两种工作方式循环方式和并发方式应用进程跨越网络的通信无连接循环服务器UDP
服务器进程UDP
客户进程客户插口服务器插口UDP
客户进程客户插口UDP
客户进程客户插口一次一个客户进程服务器进程只使用一个服务器插口。每一个客户则使用自己创建的客户插口(端口号自己设定)。2、服务器的两种工作方式应用进程跨越网络的通信面向连接并发服务器2、服务器的两种工作方式
TCPTCP
客户进程客户插口临时插口TCP
客户进程客户插口TCP
客户进程客户插口
主服务器进程TCP连接仅用于接受服务请求的插口创建从属服务器进程所有这些插口都使用服务器的熟知端口号内容纲要C/S结构网络模型应用进程跨越网络的通信WindowsSocket编程时序图基本套接字API调用WindowsSocketWindowsSockets是MicrosoftWindows的网络程序设计接口,它是从BerkeleySockets扩展而来的,以动态链接库的形式提供给程序员使用。WindowsSockets在继承了BerkeleySockets主要特征的基础上,又对他进行了重要扩充。这些扩充主要是提供了一些异步函数,并增加了符合Windows消息驱动特性的网络时间异步选择机制。1、WindowsSockets的实现WindowsSocketWindowsSockets1.1和berkeleySockets都是基于TCP/IP协议的;windowsSockets2从WindowsSockets1.1发展而来,与协议无关并向下兼容,可以使用任何底层传输协议提供的通信能力,来为上层应用程序完成网络数据通讯,而不关心底层网络链路的通讯情况,真正的实现了底层网络通讯对应用程序的透明。1、WindowsSockets的实现WindowsSocket流式套接字(SOCK_STREAM)提供面向连接、可靠的数据传输服务,数据无差错、无重复的发送,并且按发送顺序接收。数据报式套接字(SOCK_DGRAM)提供无连接服务。数据包以独立包形式发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱。原始套接字(sock_raw)2、套接字的类型内容纲要C/S结构网络模型应用进程跨越网络的通信WindowsSocket编程时序图基本套接字API调用编程时序图服务器recvfrom(…)socket(…)bind(…)recvfrom(…)无限制重复socket(…)若需要就重复sendto(…)进程sendto(…)close(…)客户请求响应无连接循环服务器服务器read(…)socket(…)bind(…)accept(…)无限制重复socket(…)若需要就重复write(…)进程close(…)接受close(…)客户请求响应listen(…)fork(…)connect(…)write(…)read(…)close(…)监听若需要就重复连接请求主服务器close(…)接受从属服务器面向连接并发服务器内容纲要C/S结构网络模型应用进程跨越网络的通信WindowsSocket编程时序图基本套接字API调用基于TCP(面向连接)的socket编程3、套接字编程概念WORDwVersionRequested;WSADATAwsaData;interr;wVersionRequested=MAKEWORD(1,1);//请求1.1版本的socketerr=WSAStartup(wVersionRequested,&wsaData);if(err!=0)return;if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)//判断高低字节是否是和请求的版本相对应{
WSACleanup();//释放分配的资源,终止对winsocket的调用return;}加载套接字库,进行套接字库的版本协商
套接字编程概念SOCKETsocket(intaf,inttype,intprotocol);参数一指定地址族,对于TCP/IP协议只能是AF_INET(也可写成PF_INET)参数二指定socket类型,SOCK_STREAM流式,SOCK_DGRAM数据报式参数三指定与特定的地址家族相关的协议,为0时自动选择如果调用成功,返回SOCKET类型的套接字描述符,否则返回INVALID_SOCKET3、基于TCP的服务器端程序创建套接字(socket)套接字编程概念bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//绑定参数一指定要绑定的套接字参数二套接字的本地地址信息,根据协议不同长度不同参数三指定参数二地址的长度3、基于TCP的服务器端程序
将套接字绑定到一个本地地址和端口上
(bind)套接字编程概念structsockaddr{unsignedshortsa_family;charsa_data[14];};第一个字段sa_family指定地址家族,这里必须为AF_INET。第二个字段sa_data仅仅是表示要求一块内存分配区,起到占位的作用,该区域中指定与协议相关的具体地址信息。TCP/IP中使用SOCKADDR_IN结构替换,以方便填写地址信息。网络字节顺序3、基于TCP的服务器端程序
SOCKADDR结构体套接字编程概念Structsockaddr_in{sin_family;sin_port;sin_addr;sin_zero[8];};SOCKADDR_INaddrSrv;//定义一个地址结构体变量,其中的成员除了sin_family之外,都要使用网络字节序addrSrv.sin_family=AF_INET;//地址簇,对于IP地址将一直是AF_INETaddrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//套接字的主机IP地址,htonl(s)转换主机字节序到网络字节序addrSrv.sin_port=htons(6000);//分配套接字的端口3、基于TCP的服务器端程序
SOCKADDR_IN结构体套接字编程概念listen(sockSrv,5);//监听//参数一套接字描述符//参数二等待连接队列的最大长度3、基于TCP的服务器端程序
将套接字设为监听模式,准备接收客户请求套接字编程概念SOCKETsockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);//接受请求参数一套接字参数二[out]连接实体的地址结构参数三[out]包含返回地址结构的长度其中的SOCKADDR_INaddrClient;//存储客户端地址信息其中的intlen=sizeof(SOCKADDR);//地址信息长度3、基于TCP的服务器端程序
等待客户请求到来(accept)套接字编程概念send(SOCKETs,constcharFAR*buf,intlen,intflags);//参数一套接字,注意这里是刚才新建的套接字,即处理连接的套接字//参数二要传送的数据//参数三数据的长度。这里最好是发送长度值加+1,以便发送‘\0’字符3、基于TCP的服务器端程序用返回的套接字和客户端进行通信(send)套接字编程概念intrecv(SOCKETs,charFAR*buf,intlen,intflags);//参数一套接字,注意这里是刚才新建的套接字
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年内蒙古医科大学附属人民医院医护人员招聘笔试参考试题及答案详解
- 2026年温州市人民医院(信河院区)医护人员招聘考试参考题库及答案详解
- 2026年上海交通大学医学院附属瑞金医院北院医护人员招聘考试备考试题及答案详解
- 2026年中国人民解放军三零七医院医护人员招聘笔试备考题库及答案详解
- 2026年丽水市第二人民医院医护人员招聘考试备考题库及答案详解
- 2026年景德镇市中医医院医护人员招聘考试参考试题及答案详解
- 2026年天水市第一人民医院医护人员招聘笔试备考题库及答案详解
- 2026年佳木斯市中医院医护人员招聘考试备考试题及答案详解
- 2026年华夏银行(济南分行)人员招聘考试参考题库及答案详解
- 2026年中国人民解放军第四二二医院医护人员招聘笔试备考题库及答案详解
- 第一章特殊平行四边形-问题解决活动:作内嵌于正方形的正八边形2026-2027学年北师大版数学九年级上册
- 急性心肌梗死患者的早期识别与处理
- 2026-2030中国咖啡液市场销售量预测与投资前景深度研究研究报告
- 2026年今年征兵心理测试题及答案
- 临床机械通气的护理与监测要点
- 2026江苏徐州市新盛集团下属城商集团招聘12人备考题库及参考答案详解一套
- 2026年黑龙江哈尔滨第三中学高三第一次模拟考试数学试题含答案解析精校版
- 医保飞行检查培训
- 《眼科临床诊疗指南(2025版)》
- JJF 2370-2026建筑运行阶段碳排放计量技术规范
- 第17课 物联数据需采集 课件 2025-2026学年人教版初中信息科技八年级全一册
评论
0/150
提交评论