电子科技大学网络编程课件第四讲——套接字API.ppt

上传人:s****8 文档编号:67197718 上传时间:2022-12-24 格式:PPT 页数:29 大小:3.13MB
返回 下载 相关 举报
电子科技大学网络编程课件第四讲——套接字API.ppt_第1页
第1页 / 共29页
电子科技大学网络编程课件第四讲——套接字API.ppt_第2页
第2页 / 共29页
点击查看更多>>
资源描述

《电子科技大学网络编程课件第四讲——套接字API.ppt》由会员分享,可在线阅读,更多相关《电子科技大学网络编程课件第四讲——套接字API.ppt(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、计算机网络编程计算机网络编程第四讲第四讲 套接字套接字APIAPI电子科技大学计算机学院电子科技大学计算机学院电子科技大学计算机学院电子科技大学计算机学院套接字的概念套接字的概念BerkeleyBerkeley套接字套接字套接字概要套接字概要套接字主要系统调用套接字主要系统调用用于整数转换的函数调用用于整数转换的函数调用在程序中使用套接字调用在程序中使用套接字调用套接字调用参数相关的符号常量套接字调用参数相关的符号常量目录目录计算机网络编程电子科大计算机学院计算机网络编程电子科大计算机学院什么是套接字什么是套接字1.套接字是一个主机本地应用程序所创建的套接字是一个主机本地应用程序所创建的,为操

2、作系统为操作系统所控制的接口所控制的接口(“门门”).2.应用进程通过这个接口应用进程通过这个接口,使用传输层提供的服务使用传输层提供的服务,跨网跨网络发送络发送(或接收或接收)消息消息.3.Client/server模式的通信接口模式的通信接口套接字接口套接字接口.socketprocessTCP withbuffers,variablessocket由应用程序由应用程序开发者控制开发者控制由操作系统控制由操作系统控制host orserverprocessTCP withbuffers,variablessocketcontrolled byapplicationdevelopercont

3、rolled byoperatingsystemhost orserverinternet来自来自UNIXUNIX系统系统BerkeleyBerkeley套接字套接字v ARPAARPA要求伯克利分校将要求伯克利分校将TCP/IPTCP/IP移植到移植到UNIXUNIX中中v 需要创建一个需要创建一个接口接口,便于应用程序使用这个接口,便于应用程序使用这个接口 进行网络进行网络通信通信v 尽可能使用现有的系统调用尽可能使用现有的系统调用,同时添加新的系统调用支持同时添加新的系统调用支持TCP/IPTCP/IP。v这个系统被称为这个系统被称为BSD UNIX(Berkeley Software

4、BSD UNIX(Berkeley Software Distribution)Distribution),成为事实上的标准,成为事实上的标准19811981提出于提出于BSD4.1 UNIX,BSD4.1 UNIX,本书基于本书基于BSD4.4 BSD4.4 版本版本计算机网络编程电子科大计算机学院BerkeleyBerkeley套接字套接字考虑:接口是专门针对考虑:接口是专门针对TCP/IPTCP/IP协议协议,还是可以为其还是可以为其它协议所用呢它协议所用呢?p方法一方法一:定义专门支持定义专门支持TCP/IPTCP/IP通信的一些函数通信的一些函数p方法二方法二:定义支持一般网络通信的

5、函数,用参数使定义支持一般网络通信的函数,用参数使TCP/IPTCP/IP通信作为一种特例通信作为一种特例BerkeleyBerkeley套接字使用第二种办法,具有通用性,套接字使用第二种办法,具有通用性,TCP/IPTCP/IP是一个族是一个族PF_INETPF_INETp另外,应用程序知名使用服务的类型,而不是指定协议名另外,应用程序知名使用服务的类型,而不是指定协议名争论:争论:p 通用性没有必要,使应用程序难以阅读通用性没有必要,使应用程序难以阅读p 通用性可以使程序员免于了解协议族的细节通用性可以使程序员免于了解协议族的细节计算机网络编程电子科大计算机学院指明一个协议接口指明一个协议

6、接口文件描述符:进程的文件描述符表的下标。文件描述符:进程的文件描述符表的下标。OSOS中每个进程对中每个进程对应一个文件描述符表,表中每个元素指向和文件相对应的一应一个文件描述符表,表中每个元素指向和文件相对应的一个内部的数据结构。个内部的数据结构。套接字和文件类似,每个活动套接字使用一个小整数标识,套接字和文件类似,每个活动套接字使用一个小整数标识,进程的文件描述符和套接字描述符值进程的文件描述符和套接字描述符值不能相同不能相同socketsocket函数:创建套接字,返回描述符(不是函数:创建套接字,返回描述符(不是openopen函数)函数)计算机网络编程电子科大计算机学院套接字概要套

7、接字概要套接字描述符套接字描述符0:1:2:3:进程的文件描述符表进程的文件描述符表(一个进程一张)(一个进程一张)用于文件用于文件0的内部数据结构的内部数据结构用于文件用于文件1的内部数据结构的内部数据结构用于文件用于文件2的内部数据结构的内部数据结构用于文件用于文件3的内部数据结构的内部数据结构调用调用socketsocket将创建一个新的描述符条目将创建一个新的描述符条目结构的许多字段是其他的系统调用来填结构的许多字段是其他的系统调用来填计算机网络编程电子科大计算机学院套接字概要套接字概要针对套接字的数据结针对套接字的数据结构构0:1:2:3:4:描述符表描述符表(一个进程一张)(一个进

8、程一张)family:PF_INETservice:SOCK_STREAMLocal IP:Remote IP:Local port:Remote port:创建方式相同,使用方式不同创建方式相同,使用方式不同等待传入连接的套接字等待传入连接的套接字被动被动,如服务器套接字如服务器套接字发起连接的套接字发起连接的套接字主动主动,如客户套接字如客户套接字指明端点地址:创建时不指定,使用时指明指明端点地址:创建时不指定,使用时指明TCP/IPTCP/IP需要指明协议端口号和需要指明协议端口号和IPIP地址地址TCP/IPTCP/IP协议族和地址族的对应:协议族和地址族的对应:TCP/IPTCP/I

9、P协议族:协议族:PF_INETPF_INET对应的对应的TCP/IPTCP/IP的地址族:的地址族:AF_INETAF_INET计算机网络编程电子科大计算机学院套接字概要套接字概要主动套接字和被动套接主动套接字和被动套接字字套接字系统定义的一般化的地址结构套接字系统定义的一般化的地址结构(地址族,该族的端点地址)(地址族,该族的端点地址)计算机网络编程电子科大计算机学院类属地址结构类属地址结构套接字的普通套接字的普通C定义结定义结构构struct sockaddr u_char sa_len;u_short sa_family;char sa_data14;/14B通用的地址结构(只是很通用

10、的地址结构(只是很适用于适用于AF_INET族中的地族中的地址)址)TCP/IP的地址定义的地址定义struct sockaddr_in u_char sin_len;u_short sin_family;u_short sin_port;/2Bstruct in_addr sin_addr;/4Bchar sin_zero8;/8B IP专用的结构专用的结构套接字调用分为两组:套接字调用分为两组:主调用:提供下层功能的访问主调用:提供下层功能的访问实用例程:提供帮助实用例程:提供帮助套接字调用带有参数,允许以多种方式来使用它们。套接字调用带有参数,允许以多种方式来使用它们。可被客户或服务器使

11、用可被客户或服务器使用可被可被TCPTCP或或UDPUDP使用使用可使用特定或非特定的远程端点地址可使用特定或非特定的远程端点地址计算机网络编程电子科大计算机学院套接字套接字APIAPI的主要系统调用的主要系统调用int Socketint Socket(int domain,int type,int protocol)(int domain,int type,int protocol)功能:功能:创建一个新的套接字,返回套接字描述符创建一个新的套接字,返回套接字描述符参数说明:参数说明:ldomaindomain:域类型,指明使用的协议栈,如:域类型,指明使用的协议栈,如TCP/IPTCP/

12、IP使用的是使用的是 PF_INETPF_INETltype:type:指明需要的服务类型指明需要的服务类型,如如l lSOCK_DGRAM:SOCK_DGRAM:SOCK_DGRAM:SOCK_DGRAM:数据报服务,数据报服务,数据报服务,数据报服务,UDPUDPUDPUDP协议协议协议协议l lSOCK_STREAM:SOCK_STREAM:SOCK_STREAM:SOCK_STREAM:流服务,流服务,流服务,流服务,TCPTCPTCPTCP协议协议协议协议l lprotocol:protocol:protocol:protocol:一般都取一般都取一般都取一般都取0 0 0 0(由系

13、统根据服务类型选择默认的协议)(由系统根据服务类型选择默认的协议)(由系统根据服务类型选择默认的协议)(由系统根据服务类型选择默认的协议)请创建一个用于请创建一个用于请创建一个用于请创建一个用于TCPTCPTCPTCP通信的套接字。通信的套接字。通信的套接字。通信的套接字。举例:举例:举例:举例:s=socket(PF_INET,SOCK_STREAM,0)s=socket(PF_INET,SOCK_STREAM,0)s=socket(PF_INET,SOCK_STREAM,0)s=socket(PF_INET,SOCK_STREAM,0)计算机网络编程电子科大计算机学院一些主调用的套接字一些

14、主调用的套接字API:API:功能:为套接字指明一个本地端点地址功能:为套接字指明一个本地端点地址lTCP/IPTCP/IP协议使用协议使用sockaddr_insockaddr_in结构,包含结构,包含IPIP地址和端地址和端口号口号l服务器使用它来指明熟知的端口号,然后等待连接服务器使用它来指明熟知的端口号,然后等待连接参数说明:参数说明:lSockfd:Sockfd:套接字描述符,指明创建连接的套接字套接字描述符,指明创建连接的套接字lmy_addr:my_addr:本地地址,本地地址,IPIP地址和端口号地址和端口号laddrlen:addrlen:地址长度地址长度举例:举例:bind

15、(sockfd,bind(sockfd,(struct sockaddr(struct sockaddr*)&address,sizeof(address);*)&address,sizeof(address);计算机网络编程电子科大计算机学院int bind(int sockfd,struct sockaddr*int bind(int sockfd,struct sockaddr*my_addr,int addrlen)my_addr,int addrlen)功能:功能:面向连接的套接字使用它将一个套接字置为被动模面向连接的套接字使用它将一个套接字置为被动模式,并准备接收传入连接。用于服务

16、器,指明某个式,并准备接收传入连接。用于服务器,指明某个套接字连接是被动的套接字连接是被动的参数说明:参数说明:lSockfd:Sockfd:套接字描述符,指明创建连接的套接字套接字描述符,指明创建连接的套接字linput_queue_size:input_queue_size:该套接字使用的队列长度该套接字使用的队列长度,指定在请指定在请求队列中允许的最大请求数求队列中允许的最大请求数 请将套接字设为被动模式,并允许最大请求数请将套接字设为被动模式,并允许最大请求数为为2020。举例:举例:listen(sockfd,20)listen(sockfd,20)计算机网络编程电子科大计算机学院i

17、nt listen(int sockfd,int input_queue_size)int listen(int sockfd,int input_queue_size)功能:获取传入连接请求,返回新的连接的套接字功能:获取传入连接请求,返回新的连接的套接字描述符。描述符。l为每个新的连接请求创建了一个新的套接字,服务器只对为每个新的连接请求创建了一个新的套接字,服务器只对新的连接使用该套接字,原来的监听套接字接收其他的连新的连接使用该套接字,原来的监听套接字接收其他的连接请求。接请求。l新的连接上传输数据使用新的套接字,使用完毕,服务器新的连接上传输数据使用新的套接字,使用完毕,服务器将关闭

18、这个套接字。将关闭这个套接字。参数说明:参数说明:lSockfd:Sockfd:套接字描述符,指明正在监听的套接字套接字描述符,指明正在监听的套接字laddr:addr:提出连接请求的主机地址提出连接请求的主机地址laddrlen:addrlen:地址长度地址长度举例:举例:new_sockfd=accept(sockfd,new_sockfd=accept(sockfd,(struct(struct sockaddr*)&address,sizeof(address);sockaddr*)&address,sizeof(address);计算机网络编程电子科大计算机学院int accept(

19、int sockfd,int accept(int sockfd,struct sockaddrstruct sockaddr*addr,*addr,int*addrlen);int*addrlen);功能:功能:同远程服务器建立主动连接,成功时返回同远程服务器建立主动连接,成功时返回0 0,若连接失败返回若连接失败返回1 1。参数说明:参数说明:Sockfd:Sockfd:套接字描述符,指明创建连接的套接字套接字描述符,指明创建连接的套接字Server_addr:Server_addr:指明远程端点:指明远程端点:IPIP地址和端口号地址和端口号sockaddr_len:sockaddr_l

20、en:地址长度地址长度举例举例(P49):connect(s,remaddr,remaddrlen)(P49):connect(s,remaddr,remaddrlen)计算机网络编程电子科大计算机学院int connectint connect(int sockfd,struct sockaddr int sockfd,struct sockaddr*server_addr,int sockaddr_len*server_addr,int sockaddr_len)功能:功能:l在在TCPTCP连接上发送数据连接上发送数据,返回成功传送数据的长度,出返回成功传送数据的长度,出错时返回错时返回

21、1 1。lsendsend会将外发数据复制到会将外发数据复制到OSOS内核中,也可以使用内核中,也可以使用sendsend发送面向连接的发送面向连接的UDPUDP报文。报文。参数说明:参数说明:lsockfd:sockfd:套接字描述符套接字描述符ldata:data:指向要发送数据的指针指向要发送数据的指针ldata_len:data_len:数据长度数据长度lflags:flags:通常为通常为0 0举例举例(p50)(p50):send(s,req,strlen(req),0);send(s,req,strlen(req),0);计算机网络编程电子科大计算机学院int send(int

22、sockfd,const void*data,int int send(int sockfd,const void*data,int data_len,unsigned int flags)data_len,unsigned int flags)功能:基于功能:基于UDPUDP发送数据报,返回实际发送的数据长度,出错发送数据报,返回实际发送的数据长度,出错时返回时返回1 1参数说明:参数说明:sockfd:sockfd:套接字描述符套接字描述符data:data:指向要发送数据的指针指向要发送数据的指针data_len:data_len:数据长度数据长度flags:flags:通常为通常为0

23、0remaddr:remaddr:远端地址:远端地址:IPIP地址和端口号地址和端口号remaddr_len:remaddr_len:地址长度地址长度举例:举例:sendto(sockfd,buf,sizeof(buf),0,(struct sendto(sockfd,buf,sizeof(buf),0,(struct sockaddr*)&address,sizeof(address);sockaddr*)&address,sizeof(address);计算机网络编程电子科大计算机学院int sendto(int sockfd,const void*data,int int sendto(

24、int sockfd,const void*data,int int sendto(int sockfd,const void*data,int int sendto(int sockfd,const void*data,int data_len,unsigned int flags,data_len,unsigned int flags,data_len,unsigned int flags,data_len,unsigned int flags,struct sockaddr struct sockaddr struct sockaddr struct sockaddr*remaddr,s

25、ock_len remaddr_len*remaddr,sock_len remaddr_len*remaddr,sock_len remaddr_len*remaddr,sock_len remaddr_len)功能:功能:从从TCPTCP接收数据接收数据,返回实际接收的数据长度,出错时返回返回实际接收的数据长度,出错时返回1 1。服务器使用其接收客户请求,客户使用它接受服务器的应答。如果没有数据,将服务器使用其接收客户请求,客户使用它接受服务器的应答。如果没有数据,将阻塞阻塞。如果如果TCPTCP收到的数据收到的数据大于大于(/(/小于小于)缓存的大小,缓存的大小,只抽出能够填满缓存的足够

26、数据只抽出能够填满缓存的足够数据(/(/抽出所有数据并返回它实际接收的字节数抽出所有数据并返回它实际接收的字节数)。也可以使用也可以使用recvrecv接收面向连接的接收面向连接的UDPUDP的报文,若缓存不能装下整个报文,填满缓的报文,若缓存不能装下整个报文,填满缓存后剩下的数据将被丢弃。存后剩下的数据将被丢弃。参数说明:参数说明:uSockfd:Sockfd:套接字描述符套接字描述符uBuf:Buf:指向内存块的指针指向内存块的指针uBuf_len:Buf_len:内存块大小,以字节为单位内存块大小,以字节为单位uflags:flags:一般为一般为0 0(MSG_WAITALLMSG_W

27、AITALL接收到指定长度数据时才返回)接收到指定长度数据时才返回)举例:举例:recv(sockfd,buf,8192,0)recv(sockfd,buf,8192,0)计算机网络编程电子科大计算机学院int recv(int sockfd,void*buf,int int recv(int sockfd,void*buf,int buf_len,unsigned int flags);buf_len,unsigned int flags);功能:从功能:从UDPUDP接收数据,返回实际接收的字节数,失败时接收数据,返回实际接收的字节数,失败时返回返回1 1参数说明:参数说明:uSockfd

28、:Sockfd:套接字描述符套接字描述符ubuf:buf:指向内存块的指针指向内存块的指针ubuf_len:buf_len:内存块大小,以字节为单位内存块大小,以字节为单位uflags:flags:一般为一般为0 0ufrom:from:远端的地址,远端的地址,IPIP地址和端口号地址和端口号ufromlen:fromlen:远端地址长度远端地址长度举例:举例:recvfrom(sockfd,buf,8192,0,recvfrom(sockfd,buf,8192,0,(struct,(struct sockaddr*)&address,sizeof(address);sockaddr*)&ad

29、dress,sizeof(address);计算机网络编程电子科大计算机学院int recvfrom(int sockfd,void*buf,int int recvfrom(int sockfd,void*buf,int buf_len,unsigned int flags,struct buf_len,unsigned int flags,struct sockaddr*from,sock_len*fromlen);sockaddr*from,sock_len*fromlen);功能:功能:l撤销套接字撤销套接字.l如果如果只有只有一个进程使用,立即终止连接并撤销该套接字,一个进程使用,立

30、即终止连接并撤销该套接字,如果多个进程共享该套接字,将引用数减一,如果引用数如果多个进程共享该套接字,将引用数减一,如果引用数降到零,则关闭连接并撤销套接字。降到零,则关闭连接并撤销套接字。参数说明:参数说明:lSockfd:Sockfd:套接字描述符套接字描述符举例:举例:close(socket_descriptor)close(socket_descriptor)计算机网络编程电子科大计算机学院close(int sockfd);close(int sockfd);readread和和writewrite在在UNIXUNIX和和LinuxLinux中,可以代替中,可以代替recvrecv

31、和和send,send,因为都调用内核的因为都调用内核的sosendsosend实现。实现。小结:小结:计算机网络编程电子科大计算机学院套接字套接字APIAPI中的主要系统调用中的主要系统调用socket*connect*send(write)*recv(read)*close*bind*listen*accept*recvfrom*sendto*recvmsgsendmsgshutdowngetpeernamegetsockoptsetsockopt不同的结构的机器阅读数据时使用不同的顺序不同的结构的机器阅读数据时使用不同的顺序16 bit integer:计算机网络编程电子科大计算机学院字

32、节顺序转换Low ByteLow ByteHigh ByteHigh ByteHigh ByteHigh ByteLow ByteLow ByteAddress AAddress AAddress A+1Address A+1Big-indian machineBig-indian machine高位在低地址高位在低地址littel-indian machine littel-indian machine 低位在低地址低位在低地址假设一个 Big-Endian machine(大端机)发送了16 bits integer,其值2:而一个 Little-Endian machine(小端机)却认

33、为收到了512:所以在发送和接收网络数据时有必要进行字节顺序转所以在发送和接收网络数据时有必要进行字节顺序转换换计算机网络编程电子科大计算机学院字节顺序转换字节顺序转换00000010000000000000000000000010网络字节顺序:最高位字节在前网络字节顺序:最高位字节在前有些套接字例程要求参数按照网络字节顺序存储。有些套接字例程要求参数按照网络字节顺序存储。如如sockaddr_insockaddr_in需要网络字节顺序和本地主机字节顺序进行转换需要网络字节顺序和本地主机字节顺序进行转换的函数,坚持使用,便于移植。的函数,坚持使用,便于移植。计算机网络编程电子科大计算机学院用于

34、整数转换的函数调用用于整数转换的函数调用Low ByteLow ByteHigh ByteHigh ByteHigh ByteHigh ByteLow ByteLow ByteAddress AAddress AAddress A+1Address A+1分为短(分为短(short 16short 16位位)和长(和长(long 32long 32位位)两种两种htons:htons:将一个短整数从本地字节顺序转换为将一个短整数从本地字节顺序转换为网络字节顺序;网络字节顺序;ntohs:ntohs:将一个短整数从网络字节顺序转换为将一个短整数从网络字节顺序转换为本地字节顺序;本地字节顺序;ht

35、onlhtonl和和ntohlntohl:类似如上类似如上计算机网络编程电子科大计算机学院用于整数转换的函数调用用于整数转换的函数调用使用使用TCPTCP的客户和服务器套接字函数调用序列的客户和服务器套接字函数调用序列计算机网络编程电子科大计算机学院在程序中使用套接字调用在程序中使用套接字调用socket客户端客户端connectsendrecvclosesocket服务器端服务器端bindlistenacceptclosesendrecvUNIXUNIX系统提供了预定义的符号常量和数据结构来系统提供了预定义的符号常量和数据结构来声明数据和指明参数:声明数据和指明参数:使用何种服务:使用何种服

36、务:SSOCK_DGRAM:SOCK_DGRAM:数据报服务,数据报服务,UDPUDP协议协议SSOCK_STREAM:SOCK_STREAM:流服务,流服务,TCPTCP协议协议SPF_INETPF_INET:使用:使用TCP/IPTCP/IP协议族协议族SAF_INET:AF_INET:使用使用TCP/IPTCP/IP地址结构地址结构需要需要includeinclude,引用出现这些定义的文本,引用出现这些定义的文本#include#include#include#include 计算机网络编程电子科大计算机学院套接字调用参数相关的符号常量套接字调用参数相关的符号常量套接字已经成为一种事实

37、上的标准套接字已经成为一种事实上的标准socketsocket函数使用函数使用PF_INETPF_INET说明使用说明使用TCP/IPTCP/IP其它的系统调用的使用方法其它的系统调用的使用方法lbind,listen,connect,accept,read,write,closebind,listen,connect,accept,read,write,close协议族的地址表示方式协议族的地址表示方式lAF_INETAF_INET指明含有一个指明含有一个IPIP地址和端口号的端点地址地址和端口号的端点地址lTCP/IPTCP/IP是用于定义的结构是用于定义的结构sockaddr_insoc

38、kaddr_in一些预定义的结构和常量需要一些预定义的结构和常量需要includeinclude引用引用计算机网络编程电子科大计算机学院总结总结1.什么是套接字?什么是套接字?2.PF_INET2.PF_INET和和AF_INETAF_INET分别代表什么?分别代表什么?3.struct sockaddr3.struct sockaddr和和struct sockaddr_instruct sockaddr_in有什么有什么不同?不同?4.accept4.accept调用完成什么功能,返回什么?调用完成什么功能,返回什么?5.5.系统调用系统调用SocketSocket(int domain,int type,int(int domain,int type,int protocol)protocol)中的中的typetype用来标识什么,可以有哪些值用来标识什么,可以有哪些值?计算机网络编程电子科大计算机学院作业作业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁