欢迎来到天天文库
浏览记录
ID:61772770
大小:332.50 KB
页数:45页
时间:2021-03-20
《第20章--基本套接字编程.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第20章基本套接字编程套接字编程简述套接字数据结构基本套接字函数套接字选项TCP套接字编程UDP套接字编程小结20.1套接字编程简述套接字是位于应用层与TCP/IP协议族通信的中间软件抽象层,它逻辑上位于传输层与应用层之间,实际上由一组网络编程API组成。套接字的英文名称是Socket,也称为插口或者套接字。Socket数据传输是一种特殊的I/O。20.1.1半相关与全相关在网络通信模型中,一个连接一旦建立,则必然包括以下要素:协议、本地地址、本地端口号、远端地址和远端端口号。这样的一组要素,称为五元组
2、或全相关。其中,协议、本地地址和本地端口号,这三个要素惟一地标识了网络连接的本地进程,而协议、远端地址和远端端口号则惟一地标识了网络连接的对端进程。这三项要素又称为三元组。由于三元组指定了一个完整的网络连接的半部分,所以称为半相关。20.1.2地址族与协议族Linux套接字支持多种协议族。协议族也称为域,不同的协议族定义了不同的通信环境。常见的协议族及作用的环境如下:PF_UNIX/PF_LOCAL/PF_FILE:用于主机内进程间通信PF_INET:Ipv4网络通信协议,用于远程主机间通信PF_INE
3、T6:用于Ipv6网络通信PF_IPX:用于NovellIPX网络通信PF_X25:用于ITU-TX.25/ISO-8208网络通信20.1.3面向连接与面向无连接在套接字编程模型中,存在面向连接的服务和面向无连接的服务。面向连接的服务类似于电话系统,无连接服务则类似于电报系统。20.1.4套接字类型在创建套接字时,除需要指定协议族外,还需要指定套接字的类型。Linux系统支持多种套接字类型,主要包括:流式套接字(SOCK_STREAM)数据报套接字(SOCK_DGRAM)原始套接字(SOCK_RAW)
4、20.1.5字节序字节序是指占内存大于一个字节的类型的数据在内存中的存储顺序,按照不同的顺序可以划分为小端字节序、大端字节序两种,统称为主机字节序。20.1.6套接字连接方式在面向连接的套接字编程模式下,可以根据应用的需要构建不同的连接方式。主要包括:短连接方式:指在每进行一次通信报文收发交易时都需要先建立连接,然后进行数据收发,收发完毕后立即断开连接。长连接方式:指客户机与服务器建立好通讯连接,然后进行报文发送和接收。报文发送与接收完毕后,连接并不断开而继续存在,以便进行下一次的数据收发。20.1.7
5、数据传输方式连接建立完成后,在数据发送与接收过程中也存在不同的方式,主要包括同步和异步两种方式。对于同步方式来说,报文发送和接收是同步进行的,即报文发送后,发送方等待接收方处理完成并返回应答报文。同步方式需要考虑超时问题,报文发出后发送方需要设定超时时间,超时后发送方不再继续等待,而直接返回。对于异步方式来说,发送方只负责发送数据,不需要等待接收任何返回数据;而接收方只负责接收数据。通常情况下,异步方式在客户端和服务器端各有两个进程专门负责数据收发。这两个进程相互独立,互不影响。20.2套接字数据结构在
6、套接字编程接口函数中,定义了若干数据结构。这些数据结构大多为结构类型,基本上所有的套接字函数都会用到这些结构的内容。20.2.1套接字地址结构structsockaddr_in{__SOCKADDR_COMMON(sin_);in_port_tsin_port;structin_addrsin_addr;/*Padtosizeof'structsockaddr'.unsignedcharsin_zero[sizeof(structsockaddr)-__SOCKADDR_COMMON_SIZE-size
7、of(in_port_t)-sizeof(structin_addr)];};20.2.2通用套接字地址结构Linux系统支持多种不同的地址族,每种地址族的结构内容是各不相同的,例如,internet地址族的地址结构是sockaddr_in,而UNIX地址族的地址结构是sockaddr_un等。在向套接字的编程接口函数传递地址结构指针时,需要将各不相同的地址结构转换为一个通用的数据结构,这就是通用套接字地址结构。structsockaddr{__SOCKADDR_COMMON(sa_);charsa_d
8、ata[14];};20.2.3主机名称数据结构主机名称数据结构hostent定义了主机名与IP地址的对应关系。在套接字编程模型中,与地址绑定相关的操作都需要使用该结构。structhostent{char*h_name;char**h_aliases;inth_addrtype;inth_length;char**h_addr_list;#defineh_addrh_addr_list[0]};20.2.4服务名称数据结构Linux系统提
此文档下载收益归作者所有