计算机网络编程-第五讲-客户软件设计中算法和问题-课件

上传人:Xgjmqtw****nqtwad... 文档编号:244613823 上传时间:2024-10-05 格式:PPT 页数:23 大小:1.11MB
返回 下载 相关 举报
计算机网络编程-第五讲-客户软件设计中算法和问题-课件_第1页
第1页 / 共23页
计算机网络编程-第五讲-客户软件设计中算法和问题-课件_第2页
第2页 / 共23页
计算机网络编程-第五讲-客户软件设计中算法和问题-课件_第3页
第3页 / 共23页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,计算机通信与网络编程,电子科大计算机学院,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,计算机通信与网络编程,电子科大计算机学院,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,计算机通信与网络编程,电子科大计算机学院,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,计算机通信与网络编程,电子科大计算机学院,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,计算机通信与网络编程,电子科大计算机学院,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,计算机通信与网络编程,电子科大计算机学院,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,计算机通信与网络编程,电子科大计算机学院,*,计算机网络编程,第五讲 客户软件设计中的算法和问题,应用程序如何发起通信成为客户,应用程序如何使用,TCP,或,UDP,与服务器联系,应用程序如何使用套接字调用与协议交互,计算机网络编程,电子科大计算机学院,目录,应用程序必须指明的细节,客户还是服务器,端点地址,使用面向连接的还是无连接的,如何执行授权和防护准则,所需要的缓存的大小等,只需要概念性地了解套接字,API,需要详细了解构造通信程序的各种方法,便于迅速作出设计决策。,电子科大计算机学院,需要考虑的问题,计算机网络编程,客户应用程序比较简单:,不必明显地处理并发性,不需要特权,和常规的应用程序一样执行,不需要强行保护,依赖操作系统自动强迫执行保护,电子科大计算机学院,客户体系结构,计算机网络编程,在编译程序时,将服务器的域名或者,IP,地址说明为常量,执行快,但是服务器移动后不便,要求用户在启动程序时标定服务器,使用机器名,不必重新编译客户程序,从稳定的存储设备中获得关于服务器的信息,如果文件不存在,客户软件就不能执行,使用某个单独的协议来找到服务器,(,如广播或组播,),只能在本地小环境下应用,实际:用户在调用客户软件时指明服务器地址,根据实际情况,综合标识服务器地址,电子科大计算机学院,标识服务器的位置的几种方式,计算机网络编程,客户程序调用时常指明参数,客户使用,参数语法,:,域名方式或,IP,地址方式,域名和,IP,地址的确定:扫描参数,看是否含有字母。,全参数化的客户软件允许用户指明协议端口号和机器,使用两个参数:,mail.uestc.edu smtp,使用单个参数:,mail.uestc.edu:smtp,遵循本地系统的约定:,linux,使用单独参数指明服务器的机器地址和协议端口,电子科大计算机学院,分析地址参数,计算机网络编程,使用,sockaddr_in,结构指明服务器的地址,需要二进制表示的,32bit IP,地址,套接字对地址转换的支持,(两个,库例程,),inet_addr:,IP,地址点分十进制的字符串到二进制的转换,接受一个点分十进制表示的字符串的地址,返回一个等价的二进制的地址,gethostbyname:,主机域名到二进制的转换,接受一个机器域名字符串,返回一个,hostent,结构,内含一个二进制表示的主机,IP,地址,电子科大计算机学院,查找域名,计算机网络编程,struct sockaddr_in sock;,sock.sin_addr.s_addr=inet_addr(“192.168.0.1”);,/,接受一个点分十进制表示的字符串的地址,返回一个等价的二进制的地址,电子科大计算机学院,IP,地址点分十进制字符串到二进制的转换,TCP/IP,的地址定义,struct sockaddr_in,u_char sin_len;,u_short sin_family,;,u_short sin_port,;,/2B,struct in_addr sin_addr;/4B,char sin_zero8;/8B,IP,专用的结构,计算机网络编程,hostent,在文件,netdb.h,的定义,struct hostent,char*h_name;,char *h_aliases;,inth_addrtype;,inth_length;,char*h_addr_list;,;,#define h_addr h_addr_list0,h_addr,指向主机地址表第一个,位置,电子科大计算机学院,查找域名,客户使用,gethostbyname,struct hostent *hptr;,char*exname=“mail.sina;,If(hptr=gethostbyname(exname),/*IP address is now in,hptr-h_addr*/,else,/*error in name-handle it*/,计算机网络编程,getservbyname:,两个参数指明期望的服务和协议。返回,servent,类型的结构指针;,注意网络字节顺序和本地机器的表示方法;,电子科大计算机学院,由名字查找某个熟知端口,struct servent,char *s_name;,char *s_aliases;,int s_port;,char *s_proto;,;,struct servent*sptr;,if(sptr=getservbyname(“smtp”,“tcp”),/*port number is now in sptr-s_port*/,else,/*error occurred-handle it*/,计算机网络编程,getprotobyname:,由协议名返回协议号;返回一个,protoent,类型结构的地址,电子科大计算机学院,由名字查找协议,struct protoent,char *p_name;,char *p_aliases;,int p_proto;,;,struct protoent*pptr;,if(pptr=getprotobyname(“udp”),/*official protocol number is now in pptr-p_proto*/,else,/*error occurred-handle it*/,计算机网络编程,找到期望与之通信的服务器,IP,地址和协议端口号,分配套接字,指明此连接需要在本地机器中的、任意的、未使用的协议端口,并允许,TCP,选择一个这样的端口,将这个套接字连接到服务器,使用应用级协议与服务器通信,关闭连接,电子科大计算机学院,TCP,客户算法,-,面向连接的客户,计算机网络编程,使用,socket,函数,将协议和服务分别说明为,PF_INET,和,SOCK_STREAM,include,语句包含一些定义常量的文件,对于,TCP/IP,,第三个参数没有用。,电子科大计算机学院,分配套接字,#include,#include,int s;/*socket descriptor*/,s=socket(PF_INET,SOCK_STREAM,0);,计算机网络编程,服务器运行于熟知的端口上,客户不是。,客户使用端口的规则:,该端口不与该机器其他进程使用端口冲突,该端口没有被分配给某个熟知服务,客户允许,TCP,自动选择本地端口,connect,调用的一个效果就是所选择的本地端口能够满足上述准则。,电子科大计算机学院,选择本地协议端口号,计算机网络编程,对于只挂在一个网络上的主机是简单的,正确的选择依赖于选路信息,但应用程序很少使用选路信息,实际中存在的问题:,一个主机可能具有多个,IP,地址,如果应用程序随机选择一个,IP,地址,可能选择了一个与,IP,地址的接口并不匹配的地址。,可能能够正确的工作。但是网络管理会困难和混乱,可靠性降低。,一般本地地址字段不填,允许,TCP/IP,自动选取本地,IP,地址,电子科大计算机学院,选择本地,IP,地址的基本问题,计算机网络编程,connect,函数:允许,TCP,套接字发起连接,强迫执行下层的三次握手,超时或者建立连接后返回,三个参数:,retcode=connect(s,remaddr,remaddrlen);,s:,套接字的描述符,remaddr:,一个,sockaddr_in,类型结构的地址,remaddrlen:,第二个参数的长度,connect,的四项任务,对指明的套接字进行检测:有效,还没有连接,将第二个参数给出的端点地址填入套接字中,为此套接字选择一个本地端点地址,发起一个,TCP,连接,并返回一个值,电子科大计算机学院,将,TCP,套接字连接到服务器,计算机网络编程,客户发送请求,等待响应,发送请求:,send;,等待响应:,recv;,send(s,req,strlen(req),0);,while(n=recv(s,bptr,buflen,0)0),bptr+=n;,buflen-=n,;,TCP,不保持记录的边界,面向流的概念,多次接收。,原因,:大块数据被分片封装发送,或由于接收方接收缓冲小而数据被发方分次发送,电子科大计算机学院,使用,TCP,和服务器通信,计算机网络编程,close,:从容关闭连接释放该套接字,常常需要在客户服务器之间,协调,关闭事宜,服务器不能关闭连接,不知客户请求是否完成,客户不知道服务器发出的数据是否全部到达,允许应用程序在一个方向关闭,TCP,连接,shutdown(s,direction);,direction:0,不允许输入,;1,不允许输出,;2,双向关闭,部分关闭可以让服务器发送完最后一个响应后,关闭连接。,电子科大计算机学院,关闭,TCP,连接,计算机网络编程,找到期望与之通信的服务器,IP,地址和协议端口号,分配套接字,指明这种通信需要本地机器中的、任意的、未使用的协议端口,并允许,UDP,选择一个这样的端口,指明报文所要发往的服务器,使用应用级协议与服务器通信,关闭连接,电子科大计算机学院,UDP,客户的编程,计算机网络编程,连接的,UDP,通信,客户使用,connect,调用指明远程端点地址,使用,SOCK_DGRAM,类型的套接字,不发起任何分组交换,不检查远程端点合法性,只是在套接字的数据结构记录远程端点的信息,不用重复指明远端地址收发报文,只和一个服务器交互比较方便,非连接的,UDP,通信,在每次发送报文的时候指明远程目的地,使用灵活,便于同不同的服务器通信,电子科大计算机学院,连接和非连接的,UDP,套接字,计算机网络编程,对于连接的,UDP,套接字,使用,send,发送报文,使用,recv,接收报文,每次,send,发送一个完整的报文,每次,recv,接受一个完整的报文,足够大缓存,不需要重复使用,recv,获得单个报文,对于非连接的,UDP,套接字,sendto:,发送报文,含有地址信息,recvfrom:,接收一个含有源地址的数据报,电子科大计算机学院,使用,UDP,和服务器通信,计算机网络编程,close:,关闭套接字,释放与之关联的资源,拒绝以后到达的报文,没有通知远程端点,shutdown:,在某个方向上终止进一步传输,不向另外一方发送任何通知报文,只是在本地套接字标明不期望在指定的方向传输数据,客户关闭输出以后,服务器并不知道,UDP,提供的是不可靠的交互,必须自己设计协议实现可靠性,电子科大计算机学院,关闭,UDP,套接字和,UDP,特点,计算机网络编程,1.,客户标识服务器位置的几种方式?,2.inet_addr,gethostbyname,getservbyname,getprotobyname,分别完成什么功能?,3.,描述,TCP,客户算法。,4.,为什么,TCP,调用,recv,接收数据时要进行多次接收?,5.close
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!