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

上传人:仙*** 文档编号:51808768 上传时间:2022-02-01 格式:PPT 页数:23 大小:2.51MB
收藏 版权申诉 举报 下载
计算机网络编程 第五讲 客户软件设计中算法问题_第1页
第1页 / 共23页
计算机网络编程 第五讲 客户软件设计中算法问题_第2页
第2页 / 共23页
计算机网络编程 第五讲 客户软件设计中算法问题_第3页
第3页 / 共23页
资源描述:

《计算机网络编程 第五讲 客户软件设计中算法问题》由会员分享,可在线阅读,更多相关《计算机网络编程 第五讲 客户软件设计中算法问题(23页珍藏版)》请在装配图网上搜索。

1、第五讲第五讲 客户软件设计中的算法和问题客户软件设计中的算法和问题 应用程序如何发起通信成为客户 应用程序如何使用TCP或UDP与服务器联系 应用程序如何使用套接字调用与协议交互计算机网络编程电子科大计算机学院应用程序必须指明的细节应用程序必须指明的细节客户还是服务器客户还是服务器端点地址端点地址使用面向连接的还是无连接的使用面向连接的还是无连接的如何执行授权和防护准则如何执行授权和防护准则所需要的缓存的大小等所需要的缓存的大小等只需要概念性地了解套接字只需要概念性地了解套接字APIAPI需要详细了解构造通信程序的各种方法,便于迅速需要详细了解构造通信程序的各种方法,便于迅速作出设计决策。作出

2、设计决策。电子科大计算机学院计算机网络编程客户应用程序比较简单:客户应用程序比较简单:不必明显地处理并发性不必明显地处理并发性不需要特权,和常规的应用程序一样执行不需要特权,和常规的应用程序一样执行不需要强行保护,依赖操作系统自动强迫执行不需要强行保护,依赖操作系统自动强迫执行保护保护电子科大计算机学院计算机网络编程在编译程序时,将服务器的域名或者在编译程序时,将服务器的域名或者IPIP地址说明为地址说明为常量常量执行快,但是服务器移动后不便执行快,但是服务器移动后不便要求用户在启动程序时标定服务器要求用户在启动程序时标定服务器使用机器名,不必重新编译客户程序使用机器名,不必重新编译客户程序从

3、稳定的存储设备中获得关于服务器的信息从稳定的存储设备中获得关于服务器的信息如果文件不存在,客户软件就不能执行如果文件不存在,客户软件就不能执行使用某个单独的协议来找到服务器使用某个单独的协议来找到服务器( (如广播或组播如广播或组播) )只能在本地小环境下应用只能在本地小环境下应用实际:用户在调用客户软件时指明服务器地址实际:用户在调用客户软件时指明服务器地址 根据实际情况,综合标识服务器地址根据实际情况,综合标识服务器地址电子科大计算机学院计算机网络编程客户程序调用时常指明参数,客户使用客户程序调用时常指明参数,客户使用参数语法参数语法: : 域名方式或域名方式或IPIP地址方式地址方式域名

4、和域名和IPIP地址的确定:扫描参数,看是否含有字地址的确定:扫描参数,看是否含有字母。母。全参数化的客户软件允许用户指明协议端口号和全参数化的客户软件允许用户指明协议端口号和机器机器(使用两个参数:使用两个参数: smtp(使用单个参数:使用单个参数::smtp遵循本地系统的约定:遵循本地系统的约定:linuxlinux使用单独参数指明服使用单独参数指明服务器的机器地址和协议端口务器的机器地址和协议端口电子科大计算机学院计算机网络编程使用使用sockaddr_insockaddr_in结构指明服务器的地址结构指明服务器的地址u需要二进制表示的需要二进制表示的32bit IP32bit IP地

5、址地址套接字对地址转换的支持套接字对地址转换的支持(两个(两个库例程库例程)uinet_addr: inet_addr: IPIP地址点分十进制的字符串到二进制的转换地址点分十进制的字符串到二进制的转换u接受一个点分十进制表示的字符串的地址,返回一个等价的接受一个点分十进制表示的字符串的地址,返回一个等价的二进制的地址二进制的地址ugethostbyname: gethostbyname: 主机域名到二进制的转换主机域名到二进制的转换u接受一个机器域名字符串,返回一个接受一个机器域名字符串,返回一个hostenthostent结构,内含一个结构,内含一个二进制表示的主机二进制表示的主机IPIP

6、地址地址电子科大计算机学院计算机网络编程structstruct sockaddr_insockaddr_in sock; sock;sock.sin_addr.s_addrsock.sin_addr.s_addr= =inet_addrinet_addr(“192.168.0.1”);(“192.168.0.1”);/接受接受一个点分十进制表示的字符串的地址,返回一个等价的二进制一个点分十进制表示的字符串的地址,返回一个等价的二进制的地址的地址 电子科大计算机学院TCP/IP的地址定义的地址定义struct sockaddr_in u_char sin_len;u_short sin_fam

7、ily;u_short sin_port;/2Bstruct in_addr sin_addr;/4Bchar 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_list0h_addr指向主机地址表第一个指向主机地址表第一个位置位置电子科大计算机学院计算机网络编程getservbyname: getservbyna

8、me: 两个参数指明期望的服务和协两个参数指明期望的服务和协议。返回议。返回serventservent类型的结构指针;类型的结构指针;注意网络字节顺序和本地机器的表示方法;注意网络字节顺序和本地机器的表示方法;电子科大计算机学院struct serventchar *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 occ

9、urred-handle it */计算机网络编程getprotobyname: getprotobyname: 由协议名返回协议号;返回一由协议名返回协议号;返回一个个protoentprotoent类型结构的地址类型结构的地址电子科大计算机学院struct protoentchar *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 /* erro

10、r occurred-handle it */计算机网络编程找到期望与之通信的服务器找到期望与之通信的服务器IPIP地址和协议端口号地址和协议端口号分配套接字分配套接字指明此连接需要在本地机器中的、任意的、未使用指明此连接需要在本地机器中的、任意的、未使用的协议端口,并允许的协议端口,并允许TCPTCP选择一个这样的端口选择一个这样的端口将这个套接字连接到服务器将这个套接字连接到服务器使用应用级协议与服务器通信使用应用级协议与服务器通信关闭连接关闭连接电子科大计算机学院计算机网络编程使用使用socketsocket函数函数将协议和服务分别说明为将协议和服务分别说明为PF_INETPF_INET

11、和和SOCK_STREAMSOCK_STREAMincludeinclude语句包含一些定义常量的文件语句包含一些定义常量的文件对于对于TCP/IPTCP/IP,第三个参数没有用。,第三个参数没有用。电子科大计算机学院#include #include int s; /* socket descriptor */s = socket ( PF_INET, SOCK_STREAM, 0);计算机网络编程服务器运行于熟知的端口上,客户不是。服务器运行于熟知的端口上,客户不是。客户使用端口的规则:客户使用端口的规则:该端口不与该机器其他进程使用端口冲突该端口不与该机器其他进程使用端口冲突该端口没有被

12、分配给某个熟知服务该端口没有被分配给某个熟知服务客户允许客户允许TCPTCP自动选择本地端口自动选择本地端口connectconnect调用的一个效果就是所选择的本地端口能够满调用的一个效果就是所选择的本地端口能够满足上述准则。足上述准则。电子科大计算机学院计算机网络编程对于只挂在一个网络上的主机是简单的对于只挂在一个网络上的主机是简单的正确的选择依赖于选路信息,但应用程序很少使用正确的选择依赖于选路信息,但应用程序很少使用选路信息,实际中存在的问题:选路信息,实际中存在的问题:(一个主机可能具有多个一个主机可能具有多个IPIP地址地址(如果应用程序随机选择一个如果应用程序随机选择一个IPIP

13、地址,可能选择了一个与地址,可能选择了一个与IPIP地址的接口并不匹配的地址。地址的接口并不匹配的地址。(可能能够正确的工作。但是网络管理会困难和混乱,可能能够正确的工作。但是网络管理会困难和混乱,可靠性降低。可靠性降低。一般本地地址字段不填,允许一般本地地址字段不填,允许TCP/IPTCP/IP自动选取本地自动选取本地IPIP地址地址电子科大计算机学院计算机网络编程connectconnect函数:允许函数:允许TCPTCP套接字发起连接套接字发起连接强迫执行下层的三次握手强迫执行下层的三次握手超时或者建立连接后返回超时或者建立连接后返回三个参数:三个参数: retcode = connec

14、t(s, remaddr, remaddrlen);retcode = connect(s, remaddr, remaddrlen); s: s: 套接字的描述符套接字的描述符 remaddr:remaddr:一个一个sockaddr_insockaddr_in类型结构的地址类型结构的地址 remaddrlen:remaddrlen:第二个参数的长度第二个参数的长度connectconnect的四项任务的四项任务对指明的套接字进行检测:有效,还没有连接对指明的套接字进行检测:有效,还没有连接将第二个参数给出的端点地址填入套接字中将第二个参数给出的端点地址填入套接字中为此套接字选择一个本地端点

15、地址为此套接字选择一个本地端点地址发起一个发起一个TCPTCP连接,并返回一个值连接,并返回一个值电子科大计算机学院计算机网络编程客户发送请求,等待响应客户发送请求,等待响应发送请求:发送请求:send;send;等待响应:等待响应:recv;recv;send(s, req, strlen(req), 0);send(s, req, strlen(req), 0);while (n = recv (s, bptr, buflen, 0) 0)while (n = recv (s, bptr, buflen, 0) 0) bptr +=n;bptr +=n;buflen -=nbuflen -

16、=n; TCPTCP不保持记录的边界,面向流的概念,多次接收。不保持记录的边界,面向流的概念,多次接收。 原因原因:大块数据被分片封装发送:大块数据被分片封装发送 或由于接收方接收缓冲小而数据被发方分次发送或由于接收方接收缓冲小而数据被发方分次发送电子科大计算机学院计算机网络编程closeclose:从容关闭连接释放该套接字:从容关闭连接释放该套接字 常常需要在客户服务器之间常常需要在客户服务器之间协调协调关闭事宜关闭事宜 服务器不能关闭连接,不知客户请求是否完成服务器不能关闭连接,不知客户请求是否完成 客户不知道服务器发出的数据是否全部到达客户不知道服务器发出的数据是否全部到达允许应用程序在

17、一个方向关闭允许应用程序在一个方向关闭TCPTCP连接连接 shutdown(s, direction);shutdown(s, direction); direction:0direction:0不允许输入不允许输入;1;1不允许输出不允许输出;2;2双向关闭双向关闭 部分关闭可以让服务器发送完最后一个响应后,关闭连接。部分关闭可以让服务器发送完最后一个响应后,关闭连接。电子科大计算机学院计算机网络编程找到期望与之通信的服务器找到期望与之通信的服务器IPIP地址和协议端口号地址和协议端口号分配套接字分配套接字指明这种通信需要本地机器中的、任意的、未使用指明这种通信需要本地机器中的、任意的、未

18、使用的协议端口,并允许的协议端口,并允许UDPUDP选择一个这样的端口选择一个这样的端口指明报文所要发往的服务器指明报文所要发往的服务器使用应用级协议与服务器通信使用应用级协议与服务器通信关闭连接关闭连接电子科大计算机学院计算机网络编程连接的连接的UDPUDP通信通信u 客户使用客户使用connectconnect调用指明远程端点地址调用指明远程端点地址J使用使用SOCK_DGRAMSOCK_DGRAM类型的套接字类型的套接字J不发起任何分组交换,不检查远程端点合法性不发起任何分组交换,不检查远程端点合法性J只是在套接字的数据结构记录远程端点的信息只是在套接字的数据结构记录远程端点的信息u不用

19、重复指明远端地址收发报文不用重复指明远端地址收发报文u只和一个服务器交互比较方便只和一个服务器交互比较方便非连接的非连接的UDPUDP通信通信在每次发送报文的时候指明远程目的地在每次发送报文的时候指明远程目的地使用灵活,便于同不同的服务器通信使用灵活,便于同不同的服务器通信电子科大计算机学院计算机网络编程对于连接的对于连接的UDPUDP套接字套接字使用使用sendsend发送报文发送报文使用使用recvrecv接收报文接收报文每次每次sendsend发送一个完整的报文发送一个完整的报文每次每次recvrecv接受一个完整的报文,足够大缓存接受一个完整的报文,足够大缓存不需要重复使用不需要重复使

20、用recvrecv获得单个报文获得单个报文对于非连接的对于非连接的UDPUDP套接字套接字sendto: sendto: 发送报文,含有地址信息发送报文,含有地址信息 recvfrom:recvfrom:接收一个含有源地址的数据报接收一个含有源地址的数据报电子科大计算机学院计算机网络编程close: close: 关闭套接字,释放与之关联的资源关闭套接字,释放与之关联的资源u拒绝以后到达的报文拒绝以后到达的报文u没有通知远程端点没有通知远程端点shutdown: shutdown: 在某个方向上终止进一步传输在某个方向上终止进一步传输u不向另外一方发送任何通知报文,只是在本地不向另外一方发送任

21、何通知报文,只是在本地套接字标明不期望在指定的方向传输数据套接字标明不期望在指定的方向传输数据u客户关闭输出以后,服务器并不知道客户关闭输出以后,服务器并不知道UDPUDP提供的是不可靠的交互提供的是不可靠的交互u必须自己设计协议实现可靠性必须自己设计协议实现可靠性电子科大计算机学院计算机网络编程1.1.客户标识服务器位置的几种方式?客户标识服务器位置的几种方式?2.inet_addr,gethostbyname,getservbyname,g2.inet_addr,gethostbyname,getservbyname,getprotobyname etprotobyname 分别完成什么功能?分别完成什么功能?3.3.描述描述TCPTCP客户算法。客户算法。4.4.为什么为什么TCPTCP调用调用recvrecv接收数据时要进行多次接收?接收数据时要进行多次接收?5.close5.close和和shutdownshutdown有什么区别?有什么区别?6.6.连接和非连接的连接和非连接的UDPUDP通信有什么区别?通信有什么区别?电子科大计算机学院计算机网络编程

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


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