【文档说明】计算机网络编程-第五讲-客户软件设计中算法和问题-课件.ppt,共(23)页,1.110 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-76953.html
以下为本文档部分文字说明:
《计算机网络编程》第五讲客户软件设计中的算法和问题◦应用程序如何发起通信成为客户◦应用程序如何使用TCP或UDP与服务器联系◦应用程序如何使用套接字调用与协议交互计算机网络编程电子科大计算机学院目录应用程序必须指明的细节客户还是服务器端点地址使用面向连接的
还是无连接的如何执行授权和防护准则所需要的缓存的大小等只需要概念性地了解套接字API需要详细了解构造通信程序的各种方法,便于迅速作出设计决策。电子科大计算机学院需要考虑的问题计算机网络编程客户应用程序比较简单:不必明显地处理并发
性不需要特权,和常规的应用程序一样执行不需要强行保护,依赖操作系统自动强迫执行保护电子科大计算机学院客户体系结构计算机网络编程在编译程序时,将服务器的域名或者IP地址说明为常量执行快,但是服务器移动后不便要求用户在启动程
序时标定服务器使用机器名,不必重新编译客户程序从稳定的存储设备中获得关于服务器的信息如果文件不存在,客户软件就不能执行使用某个单独的协议来找到服务器(如广播或组播)只能在本地小环境下应用实际:用户在调用客户软件时指明服务器地址根据实际情况,综合标
识服务器地址电子科大计算机学院标识服务器的位置的几种方式计算机网络编程客户程序调用时常指明参数,客户使用参数语法:域名方式或IP地址方式域名和IP地址的确定:扫描参数,看是否含有字母。全参数化的客户软件允许用户指明协议端口号和机器使用两个参数:mail
.uestc.edusmtp使用单个参数:mail.uestc.edu:smtp遵循本地系统的约定:linux使用单独参数指明服务器的机器地址和协议端口电子科大计算机学院分析地址参数计算机网络编程使用sockaddr_in结构指明服务器的地址需要
二进制表示的32bitIP地址套接字对地址转换的支持(两个库例程)inet_addr:IP地址点分十进制的字符串到二进制的转换接受一个点分十进制表示的字符串的地址,返回一个等价的二进制的地址gethostbyname:主机域名到二进制的转换接受一个
机器域名字符串,返回一个hostent结构,内含一个二进制表示的主机IP地址电子科大计算机学院查找域名计算机网络编程structsockaddr_insock;sock.sin_addr.s_addr=inet_
addr(“192.168.0.1”);//接受一个点分十进制表示的字符串的地址,返回一个等价的二进制的地址电子科大计算机学院IP地址点分十进制字符串到二进制的转换TCP/IP的地址定义structsockaddr_in{u_charsin_len;u
_shortsin_family;u_shortsin_port;//2Bstructin_addrsin_addr;//4Bcharsin_zero[8];//8B}IP专用的结构计算机网络编程hostent在文件netdb.h的定义structh
ostent{char*h_name;char**h_aliases;inth_addrtype;inth_length;char**h_addr_list;};#defineh_addrh_addr_lis
t[0]h_addr指向主机地址表第一个位置电子科大计算机学院查找域名客户使用gethostbynamestructhostent*hptr;char*exname=“mail.sina;If(hp
tr=gethostbyname(exname)){/*IPaddressisnowinhptr->h_addr*/}else{/*errorinname-handleit*/}计算机网络编程getservbyname:两个参数指明期望的服
务和协议。返回servent类型的结构指针;注意网络字节顺序和本地机器的表示方法;电子科大计算机学院由名字查找某个熟知端口structservent{char*s_name;char**s_aliases;ints_port;char*s_proto;}
;structservent*sptr;if(sptr=getservbyname(“smtp”,“tcp”)){/*portnumberisnowinsptr->s_port*/}else{/*er
roroccurred-handleit*/}计算机网络编程getprotobyname:由协议名返回协议号;返回一个protoent类型结构的地址电子科大计算机学院由名字查找协议structproto
ent{char*p_name;char**p_aliases;intp_proto;};structprotoent*pptr;if(pptr=getprotobyname(“udp”)){/*officialprotocolnumberisnowi
npptr->p_proto*/}else{/*erroroccurred-handleit*/}计算机网络编程找到期望与之通信的服务器IP地址和协议端口号分配套接字指明此连接需要在本地机器中的、任意的、未使用的协议端口,并允许TCP选择一个这样的端口将这个套
接字连接到服务器使用应用级协议与服务器通信关闭连接电子科大计算机学院TCP客户算法-面向连接的客户计算机网络编程使用socket函数将协议和服务分别说明为PF_INET和SOCK_STREAMinclude语句包含一些定义常量的文件对于
TCP/IP,第三个参数没有用。电子科大计算机学院分配套接字#include<sys/types.h>#include<sys/socket.h>ints;/*socketdescriptor*/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连接◦shutdo
wn(s,direction);direction:0不允许输入;1不允许输出;2双向关闭◦部分关闭可以让服务器发送完最后一个响应后,关闭连接。电子科大计算机学院关闭TCP连接计算机网络编程找到期望与之
通信的服务器IP地址和协议端口号分配套接字指明这种通信需要本地机器中的、任意的、未使用的协议端口,并允许UDP选择一个这样的端口指明报文所要发往的服务器使用应用级协议与服务器通信关闭连接电子科大计算机学院UDP客户的编程
计算机网络编程连接的UDP通信客户使用connect调用指明远程端点地址使用SOCK_DGRAM类型的套接字不发起任何分组交换,不检查远程端点合法性只是在套接字的数据结构记录远程端点的信息不用重复指明远端地址收发报文只和一
个服务器交互比较方便非连接的UDP通信在每次发送报文的时候指明远程目的地使用灵活,便于同不同的服务器通信电子科大计算机学院连接和非连接的UDP套接字计算机网络编程对于连接的UDP套接字使用send发送报文使用recv接收报文每次s
end发送一个完整的报文每次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和shutdown有什么区别?6.连接和非连接的UDP通信有什么区别?电子科大计算机学院作业计算机网络编程