欢迎来到天天文库
浏览记录
ID:27222093
大小:44.00 KB
页数:5页
时间:2018-12-02
《应用层的客户-服务器模式.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、实验一应用层的客户-服务器模式1.实验目的l了解基于Socket的C/S编程的概念l了解winsock中函数的用法及其参数的含义l掌握使用Socket开发程序的方法l掌握C/S模式下网络通信的工作流程2.实验原理2.1客户机-服务器模型网络应用的标准模型是客户/服务器模型(Client/Server模型,简称C/S模型)。由客户程序和服务器程序共同完成一个应用任务,这是一个不对称的编程模型,通信的双方扮演不同的角色:客户端和服务器。一般发起通信请求的程序被称为客户端,用户一般是通过客户端软件来访问某个服务。客户端应用程序通过与服务器建立连接,发送请求,然后接收服务器返回的内容。服
2、务器则一般是等待并处理客户端请求的应用程序。它通常由系统执行,在系统生存期间一直存在,等待客户的请求,并且在接收到客户端的请求后,根据请求向客户端返回合适的内容。客户机与服务器之间的通信过程如图1所示:图1客户端和服务器之间的通信过程这种C/S的通信模型用途十分广泛,现在的大多数网络程序都使用了这种类型。在服务器端,根据服务器请求方式的不同,服务器可以分为两种类型。(1)循环服务器这种模式是在同一时间只能处理一个客户端的请求。服务器在接收到客户端的请求后,处理这个请求,在处理完毕后才继续等待下一个请求的到来。如果在处理过程中有新的客户请求,将只能等待。这种模式通常只能用于处理速度
3、较快,处理逻辑比较简单的服务器程序的开发,如Linux的时间服务器。(2)并发服务器这种模式在同一时间可以处理多个请求,服务器会建立多个处理客户端的请求的进程或者线程,服务器接收到一个客户端请求后,将按照一定的算法选择或者创建一个进程或者线程来处理这个客户端请求,而服务器可以立即返回等待下一个客户端请求的到来。显然这种处理模式可以尽量避免单处理模式中的对客户端请求响应不及时的问题,但是这种模式需要占用较多的CPU处理时间和较多的系统资源,并且需要处理多个进程或者线程之间的通信和数据共享,编程具有一定的复杂性。通常使用这种模式处理比较耗时或者对速度要求较高的服务,如文件传输服务(F
4、TP)等。从上面的介绍中可以看出以下一个重要特点:服务器在交互开始前已运行,并且通常持续不断地接受请求、发送响应。而客户机是发出请求并等待响应的任何程序,它通常在有限次的使用服务器后终止。一般来说,服务器的执行过程如下:(1)打开通信信道(申请一下套接字),通知本地主机在某一知名端口接收客户机请求。(2)等候新的客户机请求到达该端口。(3)接收到请求,启动一个新的进程处理用户请求,同时释放旧进程以响应新的客户请求,一旦服务完成,关闭新进程与客户的通信链路。(4)回到第二步,继续等待客户机请求。(5)如果不愿响应客户机请求,关闭服务器进程。2.2网络通信基础知识和winsock相关
5、的数据结构(这是winsock1.1版本):2.2.1IP地址和端口的介绍Internet协议地址简称IP地址,它是整个网络协议的核心。在不同的网络或相同的网络中的结点进行通信时,需要使用IP地址。也就是说,Internet网上的计算设备或主机都分配有一个惟一的地址,叫IP地址。一个IP地址长为32比特,分为4个字节,比如:IP地址10100110011011110000000100000110一般都是用二进制数位模式表示IP地址,它是非常难以识记的,为容易阅读和理解,通常将IP地址以4个句点分隔开的十进制数字表示,称为点分十进制表示法(dotteddecimalnotation
6、)。上面的IP地址用这种方法表示为166.111.1.6。端口(port)是标志传输层协议和应用程序之间的数据接口,在客户端和服务器端通信时,真正完成通信功能的不是两台计算机,而是两台计算机上的进程。如果要标识具体的进程,需要引入新的地址空间,这是端口。定义端口是为了解决与多个应用程序同时进行通信的问题。每个端口有一个16位的标志符,称为端口号。所以端口号的应用范围在0-65536之间,但1024以下的端口号被标准服务保留,因此在这个协议中可以用到的端口号的范围在1024-65536之间。2.2.2IP地址和服务端口(PORT)的数据结构structsockaddr_in{sho
7、rtsin_family;//必须设为AF_INET,在使用TCP/IP协议族时。u_shortsin_port;//通信端口structin_addrsin_addr;//用于把IP地址保存为一个4字节的整数//点分十进制表示,从左到右存储//usingedlonginet_addr(constcharFAR*cp)//该函数用于将以字符串表示的IP地址转换为一个整数charsin_zero[8];};2.2.3存储主机信息的结构structhostent{charFAR*h_
此文档下载收益归作者所有