电子科技大学网络编程课件第四讲——套接字API.ppt
《电子科技大学网络编程课件第四讲——套接字API.ppt》由会员分享,可在线阅读,更多相关《电子科技大学网络编程课件第四讲——套接字API.ppt(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子科技大学 网络 编程 课件 第四 套接 API
限制150内