《《客户软件举例》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《客户软件举例》PPT课件.ppt(19页珍藏版)》请在三一办公上搜索。
1、互联网络程序设计,第六讲 客户程序举例电子科技大学计算机学院,互联网络程序设计,电子科大计算机学院,客户软件例子,通过举例子说明上章的概念、算法。例子的特点:服务本身所需要的代码很少,易理解突出基本算法说明客户/服务器如何使用系统调用代码长短和服务数量的关系模块化,过程化隐藏细节:将复杂的程序分解成一组过程,模块化的程序网络软件含有很多细节,隐藏细节减少出错机会重用代码将依赖操作系统的代码隔离,便于移植,互联网络程序设计,电子科大计算机学院,针对客户程序的过程库例子,每个客户与服务器建立联系必须:选择协议(UDP或TCP)查找服务器的机器名查找所期望的服务并将其映射到协议端口号分配套接字并与之
2、连接将这个过程设计为过程库的一部分,只需一次编码。socket=connectTCP(machine,service);socket=connectUDP(machine,service);正确抽象:高级操作,共享代码,减少出错,互联网络程序设计,电子科大计算机学院,实现connectTCP和connectUDP,将所有的底层操作放置到connectsock中实现connectTCP和connectUDP成为简单调用,int connectTCP(const char*host,const char*service)/*Arguments host-name of host to which
3、connection is desired service service associated with the desired port*/return connectsock(host,service,“tcp”);,互联网络程序设计,电子科大计算机学院,实现connectTCP和connectUDP,int connectsock(const char*host,const char*service,const char*transport);int connectUDP(const char*host,const char*service)/*Arguments host-name
4、of host to which connection is desired service service associated with the desired port*/return connectsock(host,service,“udp”);,互联网络程序设计,电子科大计算机学院,构成连接的过程,connectsock:含有所有需要用来分配套接字和连接该套接字的代码,p58#include 语句宏定义和变量定义,函数声明,功能说明函数名称和参数说明局部变量定义取得端口号,IP地址,和使用协议号使用socket得到套接字使用connect建立连接返回套接字,互联网络程序设计,电子科
5、大计算机学院,connectsock说明,复杂条件表达式:函数调用,赋值,比较在一行memset和memcpy的使用特点辅助的系统调用:gethostbyname,getprotobyname,getservbyname.errexit:出错退出int errexit(const char*format,)va_list args;va_start(args,format);vfprintf(stderr,format,args);va_end(args);exit(1);,互联网络程序设计,电子科大计算机学院,DAYTIME服务,允许用户获得当前的日期和时间客户程序访问服务器获得信息格式:w
6、eekday,month,day,year,time-timezone例子:Thursday,February 22,1996 17:3743-PST可以使用TCP也可以使用UDP实现,协议端口13,互联网络程序设计,电子科大计算机学院,DAYTIME服务 可以使用TCP也可以使用UDP实现,对于TCP版本 只要连接到来,服务器就构造包含当前日期时间的文本字符串发送,然后关闭连接。客户不用发送任何数据,发送了也会忽略。,对于UDP版本 服务器收到数据报,格式化当前的日期和时间将结果字符串放置到外发数据报中,发送给客户。激活这个响应的数据报会被丢失。,互联网络程序设计,电子科大计算机学院,针对D
7、AYTIME的TCP客户实现,TCPdaytime.c 的实现说明。P61#include语句 变量、恒量和函数定义 客户程序主函数main,含参数int main(int argc,char*argv)对参数的个数进行判断,根据参数数量的不同进行不同的参数处理如果出错,提示使用方法,退出调用TCPdaytime()获得服务器服务使用connectTCP得到套接字循环等待服务器的响应,并送到标准文件显示,互联网络程序设计,电子科大计算机学院,从TCP连接中进行读,TCP提供流式服务,不保持记录边界发送应用程序和接收应用程序分开了发送2个64字节,可能接收1次或者3次完成一次TCP连接的读操作调
8、用返回的字节数依赖于下层互联网络数据报的大小,可用的缓存空间,以及穿越网络所遇到的时延。必须要重复地调用recv(或者read),直到获得所有的数据TCP的流服务不能保证按写入时相同的数据块交付数据,互联网络程序设计,电子科大计算机学院,TIME服务,允许一台机器从另外一台机器获得日期和时间。由于存在不同的时区,所有的时间日期信息必须用国际标准时间:UCT或UT服务器应答前将本地时间转化为标准时间客户收到应答时,将国际标准时间转化为本地时间。TIME协议规定由32bit的整数来表示从1990年1月1日午夜为起点的秒数用于一台计算机使用另外一系统时钟来设置起事件,互联网络程序设计,电子科大计算机
9、学院,访问TIME服务,TIME服务使用端口37可以使用TCP协议使用TCP的TIME服务器利用连接的出现激活输出,类似DAYTIME服务。使用TCP的客户不用发送任何数据也可以使用UDP访问TIME服务客户发出包含单个数据报的请求服务器从传入的数据报中取出地址和端口号服务器将当前时间编码为一个整数,使用上述地址和端口号发回给客户,互联网络程序设计,电子科大计算机学院,精确时间和网络时延,由于网络时延,客户收到的时间慢了尽管有更加复杂的协议来处理时钟同步TIME协议因为简单,在局域环境中,在某些环境下,还是使用很多。改进TIME协议提高精确性计算服务器到客户的网络时延近似值客户计算从客户到服务
10、器,再从服务器到客户的往返时延,取其一半作为时延的近似值。,互联网络程序设计,电子科大计算机学院,针对TIME服务的UDP客户,UDPtime.c 程序说明:p65变量定义程序参数处理建立UDP套接字发送一个数据报读取数据报字节顺序转换,换算成unix的时间起点调用ctime转换成为可以读出的时间格式,互联网络程序设计,电子科大计算机学院,ECHO服务,ECHO服务器返回从客户收到的所有数据用户网络管理员测试可达性,调试协议软件,识别选路问题等TCP ECHO服务:接收连接请求,从连接中读取数据,在该连接上将数据写回。直到客户终止传送。UDP ECHO服务:接收整个数据报,根据数据报指明的端口
11、号和地址,返回整个数据报,互联网络程序设计,电子科大计算机学院,针对ECHO的TCP客户,TCPecho.c p66客户主函数:main()处理传入参数TCPecho()打开连接以后,进入循环读出每行输入通过TCP连接发送给ECHO服务器读取返回的数据并打印读出过程是一个循环,按照字符数量计数完成所有的行输入后,程序退出,互联网络程序设计,电子科大计算机学院,针对ECHO服务的UDP客户,UDPecho.c p67同前面的TCP版本类似读出返回数据的过程不同,只需要读出一次UDP客户要么收到了由服务器返回的整个行,要么什么都没有收到。除非出现差错,否则每次调用read都返回整个行,互联网络程序设计,电子科大计算机学院,小结,过程抽象:易于维护,隐藏细节,移植构造两个过程的例子:connectTCPconnectUDP给出几个客户应用的例子DAYTIME:的到当日可读格式的时间TIME:得到32比特整数形式的时间ECHO:测试网络联通性,