《Socket编程》PPT课件.ppt
《《Socket编程》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《Socket编程》PPT课件.ppt(58页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、网络编程网络编程第八章第八章第八章第八章 SocketSocket编程编程编程编程1网络编程网络编程常州大学信息学院常州大学信息学院内容内容1Socket概述概述 2Socket地址地址3Socket工作步骤工作步骤4基本基本Socket系统调用系统调用5其他其他Socket系统调用系统调用2网络编程网络编程常州大学信息学院常州大学信息学院一、一、Socket概述概述 Socket的定义的定义 Socket的英文原义是“孔”或“插座”。Socket 是进程间通信的BSD(Berkeley Software Distribution,伯克利软件套件)方法,用来让一个进程和其他的进程相互通信。定义
2、:一个本地主机建立或拥有的应用进程,在操作系统控制下,与其它(远程)应用进程之间发送和接收数据的接口。3网络编程网络编程常州大学信息学院常州大学信息学院 Socket作为一种通信协议应用程序接口(APIs),依赖于操作系统和编程语言,主要有:UNIX:Berkeley Sockets (C语言)WINDOWS:WinSock4网络编程网络编程常州大学信息学院常州大学信息学院 常用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的S
3、ocket,对应于无连接的UDP服务应用。Socket接口还定义了原始Socket(SOCK_RAW),允许程序使用IP协议。5网络编程网络编程常州大学信息学院常州大学信息学院Berkeley Socket 常用函数常用函数基本Socket函数参数获取/设置函数转换函数10网络编程网络编程常州大学信息学院常州大学信息学院1、基本Socket函数11网络编程网络编程常州大学信息学院常州大学信息学院2、参数获取/设置函数gethostbyaddr,gethostbyname:返回对应于给定IP地址/主机名的主机信息。gethostname:获取主机名。getpeername:获取对方名字。gets
4、ockname:获取一个与套接字相联系的本地名字。12网络编程网络编程常州大学信息学院常州大学信息学院getprotobyname,getprotobynumber:返回对应于给定协议名/协议号的相关协议信息。getservbyname,getservbyport:返回对应于给定服务名/端口号的相关服务信息。getsockopt,setsockopt:获取/设置套接字选项。ioctl:控制I/O设备。13网络编程网络编程常州大学信息学院常州大学信息学院3、转换函数(1)IP地址转换inet_addr():将点间隔的字符串格式地址转换成二进制IP地址。inet_ntoa():将二进制IP地址转换
5、成点间隔的字符串格式。(2)字节顺序转换htons()和htonl()ntohs()和ntohl()14网络编程网络编程常州大学信息学院常州大学信息学院二、二、Socket地址地址 通过一个指针参数来指定一个Socket地址结构,该指针结构在。struct socketaddr u_short sa_family;/*地址簇*/char sa_data14;/*协议地址*/15网络编程网络编程常州大学信息学院常州大学信息学院其中地址簇可以取下列值之一:AF_UNIXAF_INETAF_NSAF_IMPLINK 其中,AF 代表“Address Family”,常见的地址类型是Internet、
6、XNS和UNIX。16网络编程网络编程常州大学信息学院常州大学信息学院 对于使用最多的Internet簇,其Socket地址主要包括两大部分:端口号、IP地址,它的地址结构在中定义。struct sockaddr_in short int sin_family;/*AF_INET*/unsigned short int sin_port;struct in_addr sin_addr;unsigned char sin_zero8;/*填充0*/;17网络编程网络编程常州大学信息学院常州大学信息学院 struct sockaddr_in my_addr;my_addr.sin_family=A
7、F_INET;my_addr.sin_port=htons(3490);=inet_addr(132.241.5.10);bzero(&(my_addr.sin_zero),8);注意:sin_port置为0表示系统随机选择一个未用端口,sin_addr.s_addr置为INADDR_ANY时,系统自动填入本机IP。18网络编程网络编程常州大学信息学院常州大学信息学院三种地址类型的socket结构 Struct sockaddr_instruct sockaddr_un Family2-byte port4-byte IP(unused)Family4-byte net ID6-byte ho
8、st ID2-byte port(unused)FamilyPathname(最大108字节)Struct sockaddr_ns19网络编程网络编程常州大学信息学院常州大学信息学院三、三、Socket工作步骤工作步骤 套接口有三种类型:流式Socket(面向连接)数据报式Socket(无连接)原始Socket(IP)20网络编程网络编程常州大学信息学院常州大学信息学院 一个服务程序和几个远程客户程序利用面向连接的TCP协议完成通信。第一步,初始化初始化 服务程序 (1)调用socket创建一个新的套接字,并在传输层实体中分配空间,返回一个socket描述符以便调用中使用该套接字;(2)调用b
9、ind将一个端口标识(IP地址和端口号)赋予该套接字,使得远程客户程序能访问该服务程序。流式套接字工作原理21网络编程网络编程常州大学信息学院常州大学信息学院客户程序 (1)调用socket创建一个新的套接字,并在传输层实体中分配空间,返回一个socket描述符用于在以后的调用中使用该套接字。22网络编程网络编程常州大学信息学院常州大学信息学院第二步,建立连接建立连接服务程序 (1)调用listen分配数据空间,以便存储多个用户的连接建立请求;(2)调用accept将服务程序阻塞起来,等待接收客户程序发来的连接请求。客户程序 (1)调用connect阻塞客户程序,传输层实体开始建立连接,当连接
10、建立完成时,取消阻塞;23网络编程网络编程常州大学信息学院常州大学信息学院第三步,数据传输数据传输 双方使用send和recv完成数据的发送和接收。第四步,释放连接释放连接 每一方使用close关闭套接口,释放连接。24网络编程网络编程常州大学信息学院常州大学信息学院25网络编程网络编程常州大学信息学院常州大学信息学院四、四、基本基本Socket系统调用系统调用创建一个创建一个socket socket编程首先用socket()建立一个socket,指定所要求的通信协议类型,并返回一个整型描述符,该描述符称为socket描述符,其与Linux中的文件描述符类似,也是一个int型的变量。26网络
11、编程网络编程常州大学信息学院常州大学信息学院函数调用:int socket(int family,int type,int protocol);说明:family参数一般取AF_INET,protocol参数一般取0。函数返回Socket描述符,返回-1表示出错。27“协议”与“family”及“type”域的可能组合 FamilyTypeProtocol具体协议AF_INETAF_INETAF_INETAF_INETSOCK_DGRAMSOCK_STREAMSOCK_RAWSOCK_RAWIPPROTO_UDPIPPROTO_TCPIPPROTO_ICMPIPPROTO_RAWUDPTCPI
12、CMPIPAF_NSAF_NSAF_NSAF_NSSOCK_STREAMSOCK_SEQPACKETSOCK_RAWSOCK_RAWNSPROTO_SPPNSPROTO_SPPNSPROTO_ERRORNSPROTO_RAWSPPSPPError Protocol(raw)28网络编程网络编程常州大学信息学院常州大学信息学院应用示例:TCP:sockfd=socket(AF_INET,SOCK_STREAM,0);UDP:sockfd=socket(AF_INET,SOCK_DGRAM,0);29网络编程网络编程常州大学信息学院常州大学信息学院Socket配置:配置:bind()功能:将本地地
13、址与套接口捆绑。函数:int bind(int sockfd,const struct sockaddr*myaddr,socklen_t addrlen)说明:如果调用成功,则返回值为0,如果调用失败返回值为-1,并设定相应的错误代码errno。最常见的错误是该端口已经被其他程序绑定(EINPROGRESS)。注意:在Linux系统中,1024以下的端口只有拥有root权限的程序才能绑定。30网络编程网络编程常州大学信息学院常州大学信息学院Bind()系统调用的主要用处:服务器向系统注册它的众所周知的地址。面向连接和无连接的服务器在接受客户的请求之前都必须做这一步。客户可为自己注册一个特定的
14、地址,以便服务器可以用这个有效的地址送回响应。31网络编程网络编程常州大学信息学院常州大学信息学院监听:监听:listen()功能:监听已经绑定的端口。需要在此前调用bind()函数,否则由系统指定一个随机的端口。函数:int listen(int sockfd,int queue_length);说明:queue_length用于指定接收队列的长度,也就是在Server程序调用accept函数之前最大允许进入的连接请求数,多余的连接请求将被拒绝,典型取值为5。32网络编程网络编程常州大学信息学院常州大学信息学院操作系统Web 服务器2.bind(80)801.socket()3.listen
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Socket编程 Socket 编程 PPT 课件
限制150内