第7讲 CH5-传输层与TCPIP网络编程.ppt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第7讲 CH5-传输层与TCPIP网络编程 CH5 传输 TCPIP 网络 编程
- 资源描述:
-
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第三章 面向连接的网络通信实现,1.,万维网通信的特点,2.,传输层协议概述,3.,传输控制协议,TCP,4.TCP,传输协议报文头格式,5.TCP/IP,通信的实现,6.TCP/IP,网络编程举例,1,3.3,传输控制协议,TCP,1.TCP,协议特点,2.TCP,的连接,3.TCP,传输连接管理,2,1.,传输控制协议特点,TCP,主要特点,面向连接,的传输层协议。,TCP,连接只能是,点对点,的(一对一)。,TCP,提供,可靠交付,的服务。,TCP,提供,全双工,通信。,面向字节流,。,3,7,6,8,H,TCP,面向流的概念,发送,TCP,报文段,发送方,接收方,把字节写入,发送缓存,从接收缓存,读取字节,应用进程,应用进程,1,2,3,0,18,17,16,15,14,19,20,21,4,5,13,12,11,H,10,9,H,加上,TCP,首部,构成,TCP,报文段,TCP,TCP,字节流,字节流,H,表示,TCP,报文段的首部,x,表示序号为,x,的数据字节,TCP,连接,4,应当注意,TCP,连接是一条,虚连接,;,TCP,对应用进程一次把多长的报文发送到,TCP,的缓存中是不关心的;,TCP,根据对方给出的,窗口值,和当前,网络拥塞的程度,来决定一个报文段应包含多少个字节(,UDP,发送的报文长度是应用进程给出的)。,TCP,可把太长的数据块划分短一些再传送。,TCP,也可等待积累有足够多的字节后再构成报文段发送出去。,5,2 TCP,的连接,TCP,把连接作为最基本的抽象。,每一条,TCP,连接有两个端点。,套接字,(Socket),或,插口,TCP,连接,的端点不是主机,不是主机的,IP,地址,不是应用进程,也不是传输层的协议端口。,TCP,连接的端点叫做,套接字,。,端口号,拼接到,(,contatenated,with)IP,地址即构成了套接字。,6,套接字,(socket),套接字,socket=(IP,地址,:,端口号,),每一条,TCP,连接唯一地被通信两端的两个端点(即两个套接字)所确定。即:,TCP,连接,:=socket1,socket2,=(IP1:port1),(IP2:port2),7,8,9,3.TCP,传输连接管理,1 TCP,的连接建立,2 TCP,的连接释放,3 TCP,连接的实现,10,3.TCP,传输连接管理,传输连接就有三个阶段,即:,连接建立,、,数据传送,和,连接释放,。传输连接的管理就是使传输连接的建立和释放都能正常地进行。,连接建立过程中要解决以下三个问题:,要使每一方能够确知对方的存在。,要允许双方协商一些参数(如最大报文段长度,最大窗口大小,服务质量等)。,能够对传输实体资源(如缓存大小,连接表中的项目等)进行分配。,11,客户服务器方式,TCP,连接建立的,客户服务器方式,。,主动发起连接建立的应用进程叫做,客户,(client),。,被动等待连接建立的应用进程叫做,服务器,(server),。,12,用三次握手建立,TCP,连接,SYN=1,seq,=x,CLOSED,CLOSED,主动打开,被动打开,A,B,客户,服务器,TCP,的连接建立,A,的,TCP,向,B,发出连接请求报文段,其首部中的,同步位,SYN=1,,并选择序号,seq,=x,,表明传送,数据时的第一个数据字节的序号是,x,。,13,用三次握手建立,TCP,连接,SYN=1,seq,=x,CLOSED,CLOSED,主动打开,被动打开,A,B,客户,服务器,TCP,的连接建立,SYN=1,ACK=1,seq,=y,ack,=x,1,B,的,TCP,收到连接请求报文段后,如同意,则,发回确认。,B,在确认报文段中应使,SYN=1,,使,ACK=1,,,其确认号,ack,=x,1,,自己选择的序号,seq,=y,。,14,SYN=1,seq,=x,ACK=1,seq,=x+1,ack,=y,1,CLOSED,CLOSED,主动打开,被动打开,A,B,客户,服务器,SYN=1,ACK=1,seq,=y,ack,=x,1,A,收到此报文段后向,B,给出确认,其,ACK=1,,,确认号,ack,=y,1,。,A,的,TCP,通知上层应用进程,连接已经建立。,15,SYN=1,seq,=x,ACK=1,seq,=x+1,ack,=y,1,CLOSED,CLOSED,数据传送,主动打开,被动打开,A,B,客户,服务器,SYN=1,ACK=1,seq,=y,ack,=x,1,B,的,TCP,收到主机,A,的确认后,也通知其上层,应用进程:,TCP,连接已经建立。,16,SYN-,SENT,ESTAB-,LISHED,SYN-,RCVD,LISTEN,ESTAB-,LISHED,用三次握手建立,TCP,连接的各状态,SYN=1,seq,=x,ACK=1,seq,=x+1,ack,=y,1,CLOSED,CLOSED,数据传送,主动打开,被动打开,A,B,客户,服务器,TCP,的连接建立,SYN=1,ACK=1,seq,=y,ack,=x,1,17,FIN=1,seq,=u,CLOSED,主动关闭,数据传送,ESTAB-,LISHED,ESTAB-,LISHED,A,B,客户,服务器,CLOSED,TCP,的连接释放,数据传输结束后,通信的双方都可释放连接。,现在,A,的应用进程先向其,TCP,发出连接释放,报文段,并停止再发送数据,主动关闭,TCP,连接。,A,把连接释放报文段首部的,FIN=1,,其序号,seq,=u,,等待,B,的确认。,18,FIN=1,seq,=u,ACK=1,seq,=v,ack,=u,1,主动关闭,数据传送,通知,应用,进程,ESTAB-,LISHED,ESTAB-,LISHED,A,B,客户,服务器,TCP,的连接释放,B,发出确认,确认号,ack,=u,1,,,而这个报文段自己的序号,seq,=v,。,TCP,服务器进程通知高层应用进程。,从,A,到,B,这个方向的连接就释放了,,TCP,连接,处于,半关闭,状态。,B,若发送数据,,A,仍要接收。,19,FIN=1,seq,=u,ACK=1,seq,=v,ack,=u,1,FIN=1,ACK=1,seq,=w,ack,=u,1,主动关闭,被动关闭,数据传送,通知,应用,进程,ESTAB-,LISHED,ESTAB-,LISHED,A,B,客户,服务器,数据传送,TCP,的连接释放,若,B,已经没有要向,A,发送的数据,,其应用进程就通知,TCP,释放连接。,20,FIN=1,seq,=u,ACK=1,seq,=v,ack,=u,1,FIN=1,ACK=1,seq,=w,ack,=u,1,主动关闭,被动关闭,数据传送,通知,应用,进程,ESTAB-,LISHED,ESTAB-,LISHED,A,B,客户,服务器,数据传送,TCP,的连接释放,A,收到连接释放报文段后,必须发出确认。,ACK=1,seq,=u+1,ack,=w,1,21,FIN=1,seq,=u,ACK=1,seq,=v,ack,=u,1,FIN=1,ACK=1,seq,=w,ack,=u,1,主动关闭,被动关闭,数据传送,通知,应用,进程,ESTAB-,LISHED,ESTAB-,LISHED,A,B,客户,服务器,数据传送,TCP,的连接释放,在确认报文段中,ACK=1,,确认号,ack,w,1,,,自己的序号,seq,=u+1,。,ACK=1,seq,=u+1,ack,=w,1,22,CLOSED,ACK=1,seq,=u+1,ack,=w,1,FIN=1,seq,=u,ACK=1,seq,=v,ack,=u,1,FIN=1,ACK=1,seq,=w,ack,=u,1,FIN-,WAIT-1,CLOSE-,WAIT,FIN-,WAIT-2,LAST-,ACK,等待,2MSL,TIME-,WAIT,主动关闭,被动关闭,数据传送,通知,应用,进程,ESTAB-,LISHED,ESTAB-,LISHED,A,B,客户,服务器,数据传送,CLOSED,5.9.2 TCP,的连接释放,TCP,连接必须经过时间,2MSL,后才真正释放掉。,23,A,必须等待,2MSL,的时间,第一,为了保证 客户,A,发送的最后一个,ACK,报文段能够到达 服务器,B,。,第二,防止,“,已失效的连接请求报文段,”,出现在本连接中。,A,在发送完最后一个,ACK,报文段后,再经过时间,2MSL,,就可以使本连接持续的时间内所产生的所有报文段,都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。,24,3.,4 TCP,传输协议报文头格式,25,TCP,首部,20,字节的,固定首部,目 的 端 口,数据,偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,F,I,N,32,位,S,Y,N,R,S,T,P,S,H,A,C,K,U,R,G,位,0 8 16 24 31,填 充,TCP,数据部分,TCP,首部,TCP,报文段,IP,数据部分,IP,首部,发送在前,TCP,报文段的首部格式,26,TCP,首部,20,字节,固定,首部,目 的 端 口,数据,偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,F,I,N,S,Y,N,R,S,T,P,S,H,A,C,K,U,R,G,位,0 8 16 24 31,填 充,源端口和目的端口字段,各占,2,字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。,27,TCP,首部,20,字节,固定,首部,目 的 端 口,数据,偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,F,I,N,S,Y,N,R,S,T,P,S,H,A,C,K,U,R,G,位,0 8 16 24 31,填 充,序号字段,占,4,字节。,TCP,连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。,28,TCP,首部,20,字节,固定,首部,目 的 端 口,数据,偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,F,I,N,S,Y,N,R,S,T,P,S,H,A,C,K,U,R,G,位,0 8 16 24 31,填 充,确认号字段,占,4,字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。,29,TCP,首部,20,字节,固定,首部,目 的 端 口,数据,偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,F,I,N,S,Y,N,R,S,T,P,S,H,A,C,K,U,R,G,位,0 8 16 24 31,填 充,数据偏移(即首部长度),占,4,位,它指出,TCP,报文段的数据起始处距离,TCP,报文段的起始处有多远。“数据偏移”的单位是,32,位字(以,4,字节为计算单位)。,30,TCP,首部,20,字节,固定,首部,目 的 端 口,数据,偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,F,I,N,S,Y,N,R,S,T,P,S,H,A,C,K,U,R,G,位,0 8 16 24 31,填 充,保留字段,占,6,位,保留为今后使用,但目前应置为,0,。,31,TCP,首部,20,字节,固定,首部,目 的 端 口,数据,偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,F,I,N,S,Y,N,R,S,T,P,S,H,A,C,K,U,R,G,位,0 8 16 24 31,填 充,紧急,URG,当,URG,1,时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送,(,相当于高优先级的数据,),。,32,TCP,首部,20,字节,固定,首部,目 的 端 口,数据,偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,F,I,N,S,Y,N,R,S,T,P,S,H,A,C,K,U,R,G,位,0 8 16 24 31,填 充,确认,ACK,只有当,ACK,1,时确认号字段才有效。当,ACK,0,时,确认号无效。,33,TCP,首部,20,字节,固定,首部,目 的 端 口,数据,偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,F,I,N,S,Y,N,R,S,T,P,S,H,A,C,K,U,R,G,位,0 8 16 24 31,填 充,推送,PSH(,PuSH,),接收,TCP,收到,PSH=1,的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。,34,TCP,首部,20,字节,固定,首部,目 的 端 口,数据,偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,F,I,N,S,Y,N,R,S,T,P,S,H,A,C,K,U,R,G,位,0 8 16 24 31,填 充,复位,RST(,ReSeT,),当,RST,1,时,表明,TCP,连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。,35,TCP,首部,20,字节,固定,首部,目 的 端 口,数据,偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,F,I,N,S,Y,N,R,S,T,P,S,H,A,C,K,U,R,G,位,0 8 16 24 31,填 充,同步,SYN,同步,SYN=1,表示这是一个连接请求或连接接受报文。,36,TCP,首部,20,字节,固定,首部,目 的 端 口,数据,偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,F,I,N,S,Y,N,R,S,T,P,S,H,A,C,K,U,R,G,位,0 8 16 24 31,填 充,终止,FIN(,FINis,),用来释放一个连接。,FIN,1,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。,37,TCP,首部,20,字节,固定,首部,目 的 端 口,数据,偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,F,I,N,S,Y,N,R,S,T,P,S,H,A,C,K,U,R,G,位,0 8 16 24 31,填 充,窗口字段,占,2,字节,用来让对方设置发送窗口的依据,单位为字节。,38,TCP,首部,20,字节,固定,首部,目 的 端 口,数据,偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,F,I,N,S,Y,N,R,S,T,P,S,H,A,C,K,U,R,G,位,0 8 16 24 31,填 充,检验和,占,2,字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在,TCP,报文段的前面加上,12,字节的伪首部。,39,TCP,首部,20,字节,固定,首部,目 的 端 口,数据,偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,F,I,N,S,Y,N,R,S,T,P,S,H,A,C,K,U,R,G,位,0 8 16 24 31,填 充,紧急指针字段,占,16,位,,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。,40,3.,5 TCP/IP,通信的实现,1.,系统调用机制,2.,套接字,Socket,的作用,3.,套接字连接的建立,41,1.,TCP/IP,通信的实现,操作系统的,系统调用,(system call),机制,操作系统通过,系统调用,在应用程序和操作系统之间传递控制权。,对程序员来说,每一个,系统调用,和一般程序设计中的,函数调用,非常相似,只是系统调用是将控制权传递给了操作系统。,42,多个应用进程使用系统调用的机制,应用程序,1,应用程序,2,应用程序,n,由应用程序调用的系统函数,用户地址空间,中的应用程序,系统调用接口,系统地址空间,中的协议软件,包括,TCP/IP,协议软件的操作系统内核,43,应用编程接口,API(Application Programming Interface),当某个应用进程启动系统调用时,控制权就从应用进程传递给了,系统调用接口,。,操作系统将此调用转给某个内部过程,并执行所请求的操作。,内部过程一旦执行完毕,控制权就又通过系统调用接口返回给应用进程。,系统调用接口,实际上就是应用进程的控制权和操作系统的控制权进行转换的一个接口,即,应用编程接口,API,。,44,应用进程通过套接字接入到网络,应用进程,TCP,由应用程序,控制,因特网,由操作系统,控制,客户,服务器,套接字,TCP,应用进程,套接字,45,2.,套接字的作用,操作系统创建套接字,应用进程,请求操作系统为其创建,“,套接字,”,,以便把网络通信所需要的系统资源,分配给该应用进程;,操作系统建立,套接字描述符,建立好后,把此号码返回给应用进程。应用进程所进行的网络操作都必须使用这个号码。,应用进程关闭套接字,通信完毕后,应用进程通过一个关闭套接字的系统调用通知操作系统回收与该,“,号码,”,相关的所有资源。,46,socket,有多种不同意思,应用编程接口,API,称为,socket API,简称为,socket,。,socket API,中使用的一个函数名也叫作,socket,。,调用,socket,函数的端点称为,socket,。,调用,socke,t,函数时其返回值称为,socket,描述符,可简称为,socket,。,在操作系统内核中连网协议的,Berkeley,实现,称为,socket,实现。,47,套接字描述符表,(每一个进程一个描述符),0,:,1,:,2,:,3,:,4,:,操作系统,套接字的数据结构,协议族:,PF_INET,服务:,SOCK_STREAM,本地,IP,地址:,远地,IP,地址:,本地端口:,远地端口:,调用,socket,创建套接字,48,3.,套接字连接的建立,系统套接字调用顺序,服务器端,socket,bind,listen,accept,recv,send,close,客户端,socket,recv,send,close,connect,连接建立请求,49,伯克利套接字(,Berkeley Socket,),TCP,套接字传输原语,50,3.,套接字连接的建立,-,客户端,创建一个套接字,用,socket,原语创建一个套接字描述字结构。当套接字被创建后,它的端口号和,IP,地址都是空的。,客户端开始连接请求,利用,connect,原语,向服务器发出,TCP,连接请求,采用三次握手协议。,客户端进入数据接收,/,发送模式,当收到应答后,,TCP,连接成功建立,即可采用,send,和,recv,原语进行数据收发。,51,3.,套接字连接的建立,-,服务器端,把本地地址绑定到套接字,当套接字被创建后,它的端口号和,IP,地址都是空的,因此应用进程要调用,bind,(绑定)来指明套接字的本地地址。在服务器端调用,bind,时就是把熟知端口号和本地,IP,地址填写到已创建的套接字中。,服务器进入被动监听方式,在调用,bind,后,还必须调用,listen,(收听)把套接字设置为被动方式,以便随时接受客户的服务请求。,UDP,服务器由于只提供无连接服务,不使用,listen,系统调用。,服务器进入接受方式,紧接着就调用,accept,(接受),以便把远地客户进程发来的连接请求提取出来;,系统调用,accept,的一个变量就是要指明从哪一个套接字发起的连接。,52,3.,6 TCP/IP,网络编程举例,1.,万维网通信的特点,2.,传输层协议概述,3.,传输控制协议,TCP,4.TCP,传输协议报文头格式,5.TCP/IP,通信的实现,6.TCP/IP,网络编程举例,53,套接字地址结构,struct,sockaddr,结构,1.,为许多类型的套接字储存套接字地址信息:,结构定义,struct,sockaddr,unsigned short,sa_family,;/*,地址家族,AF_INET*/,char sa_data14;/*14,字节协议地址、套接,字目标地址和端口。*,/,;,54,用这个数据结构可以轻松处理套接字地址的基本元素。,3.,一个并列的套接字地址信息结构:,struct,sockaddr_in,(in,代表,Internet,。,),结构定义为:,struct,sockaddr_in,short,int,sin_family,;/*,通信类型*,/,unsigned short,int,sin_port,;/*,端口*,/,struct,in_addr,sin_addr,;/*Internet,地址*,/,unsigned char sin_zero8;/*,与,sockaddr,结构的长度,相同*,/,;,55,IP,地址和如何处理它们,假设你已经有了一个,sockaddr_in,结构体,ina,,你有一个,IP,地 址,132.241.5.10,要储存在其中,你就要用到函数,inet_addr,(),将,IP,地址从 点数格式转换成无符号长整型。使用方法如下:,i,na.sin_addr.s_addr,=,inet_addr(132.241.5.10);,注意,,inet_addr,(),返回的地址已经是网络字节格式,,56,socket(),函数,调用格式,int,socket(int,domain,int,type,int,protocol);,参数含义:,domain,:设置成,“,AF_INET,”,,象,sockaddr_in,结构;,type,:是,SOCK_STREAM,和,SOCK_DGRAM,类型。,Protocol,:设置为,“,0”,。,返回,返回在系统调用中要用到的,socket,描述符,,或在错误的时候返回,-1,。,57,bind(),函数,将套接字和机器上的一定的端口关联起来。,调用方法:,int,bind(int,sockfd,struct,sockaddr,*,my_addr,int,addrlen,);,参数,Sockfd,:调用,socket,返回的文件描述符;,my_addr,:数据结构,struct,sockaddr,指针,,保存本机地址,(,即端口和,IP,地址,),信息;,Addrlen,:设置为,sizeof(struct,sockaddr,),。,返回,绑定成功与否标致。,58,Bind(),函数使用举例,#include,#include,#include,#define MYPORT 3490,main(),int,sockfd,;,struct,sockaddr_in,my_addr,;,sockfd,=,socket(AF_INET,SOCK_STREAM,0);/*,需要错误检查*,/,my_addr.sin_family,=AF_INET;/*,主机字节顺序*,/,my_addr.sin_port,=,htons(MYPORT,);/*,网络字节顺序*,/,my_addr.sin_addr.s_addr,=inet_addr(132.241.5.10);,bzero(&(my_addr.sin_zero,),;/*,把结构剩余部分置零*,/,bind(sockfd,(,struct,sockaddr,*)&,my_addr,sizeof(struct,sockaddr,);,59,connect(),程序,-,如何连接到远程主机,系统调用,int,connect(int,sockfd,struct,sockaddr,*,serv_addr,int,addrlen,);,参数,sockfd,是系统调用,socket(),返回的套接字文件描述符;,serv_addr,是,保存着目的地端口和,IP,地址的数据结构,struct,sockaddr,;,addrlen,设置 为,sizeof(struct,sockaddr,),。,使用方法,60,main(),int,sockfd,;,struct,sockaddr_in,dest_addr,;/*,目的地址*,/,sockfd,=,socket(AF_INET,SOCK_STREAM,0);/*,错误检查*,/,dest_addr.sin_family,=AF_INET;/*,主机字节顺序*,/,dest_addr.sin_port,=,htons(DEST_PORT,);,/*,网络字节顺序*,/,dest_addr.sin_addr.s_addr,=,inet_addr(DEST_IP,);,bzero(&(dest_addr.sin_zero,),;/*zero the rest of the,struct,*/,connect(sockfd,(,struct,sockaddr,*)&,dest_addr,sizeof(struct,sockaddr,);,。,61,listen(),函数,系统调用,int,listen(int,sockfd,int,backlog);,参数,sockfd,是调用,socket(),返回的套接字文件描述符,backlog,是在进入队列中允许的连接数目,,即进入的连接是在队列中一直等待直到你接受,(accept(),函数,),连接,返回,在发生错误的时候返回,-1,,并设置全局错误变量,errno,。,62,accept(),函数,函数调用,SOCKET,accept(int,sockfd,void*,addr,int,*,addrlen,);,sockfd,:是和,listen(),中一样的套接字描述符,addr,:指向局部的数据结构,sockaddr_in,的指针。,这是要求接入的信息所要去的地 方(你可以测定那个地址在那个端口呼叫你)。,返回,将返回一个新的套接字文 件描述符。,这样有两个套接字,原来的一个还在侦听你的那个端口,而新套接字则准备发送,(send(),和接收,(,recv,(),数据,。,使用,63,main(),int,sockfd,new_fd,;/*,在,sock_fd,上侦听,在,new_fd,上创建新链接,*/,struct,sockaddr_in,my_addr,;,/*,地址信息*,/,struct,sockaddr_in,their_addr,;/*,对方地址信息*,/,int,sin_size,;,sockfd,=,socket(AF_INET,SOCK_STREAM,0);/*,错误检查*,/,my_addr.sin_family,=AF_INET;/*,主机字节顺序*,/,my_addr.sin_port,=,htons(MYPORT,);/*,网络字节顺序*,/,my_addr.sin_addr.s_addr,=INADDR_ANY;/*,用我的,IP,自动填充*,/,bzero(&(my_addr.sin_zero,),;/*,结构的其他部分置零*,/,bind(sockfd,(,struct,sockaddr,*)&,my_addr,sizeof(struct,sockaddr,);,listen(,sockfd,BACKLOG);,sin_size,=,sizeof(struct,sockaddr_in,);,new_fd,=,accept(,sockfd,&,their_addr,&,sin_size,);,64,send()-,流式套接字的发送,函数声明,int,send(int,sockfd,const void*,msg,int,len,int,flags);,参数,Sockfd,:发送数据,socket(,是,socket(),或,accept(),返回的,msg,是指向你想发送的数据的指针,len,是数据的长度,flags,设置为,0,返回,实际发送的数据的字节数,65,recv,()-,流式套接字的接收,函数声明,int,recv(int,sockfd,void*,buf,int,len,unsigned,int,flags);,参数,sockfd,要读的套接字描述符,buf,是要读的信息的缓冲,len,是缓 冲的最大长度,flags,设置为,0,返回,返回实际读入缓冲的数据的字节数,66,close(),和,shutdown(),函数,函数声明,close(sockfd,);,int,shutdown(int,sockfd,int,how,);,参数,sockfd,是你想要关闭的套接字文件描述符,how,的值是下面的其中之一:,0-,不允许接受,1-,不允许发送,2-,不允许发送和接受,(,和,close(),一样,),返回,shutdown(),成功时返回,0,,失败时返回,-1,67,展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




第7讲 CH5-传输层与TCPIP网络编程.ppt



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/13176339.html