Linux环境编程-网络编程(李).ppt

上传人:s****8 文档编号:68960084 上传时间:2022-12-30 格式:PPT 页数:66 大小:720KB
返回 下载 相关 举报
Linux环境编程-网络编程(李).ppt_第1页
第1页 / 共66页
Linux环境编程-网络编程(李).ppt_第2页
第2页 / 共66页
点击查看更多>>
资源描述

《Linux环境编程-网络编程(李).ppt》由会员分享,可在线阅读,更多相关《Linux环境编程-网络编程(李).ppt(66页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、Linux网络编程网络编程2009-12计算机网络计算机网络计算机网络:把分布在不同地理位置上的,具有独立功能的多台计算机、终端及其附属设备,用通信设备和通信线路连接起来,再配以相应的网络软件,以实现计算机资源共享。LAN物理拓扑结构物理拓扑结构OSI 参考模型参考模型应用层展示层会话层传输层网络层数据链路层物理层应用层展示层会话层传输层网络层数据链路层物理层Network字节序字节序不同的处理器会使用不同的方式来解释多字节数字。32 bit 整数0 x01020304网络字节序就是指大端0101020203030404小端小端/小尾小尾大端大端/大尾大尾0404030302020101低地址

2、高地址OSI vs TCP/IP应用层表示层会话层传输层网络层数据链路层物理层应用层IPv4,IPv6网络介质层TCPUDPOSI模型TCP/IP模型通过路由器连接的两个网络通过路由器连接的两个网络FTP客户TCPIP以太网驱动程序FTP服务器TCPIP令牌环驱动程序令牌环以太网驱动程序令牌环驱动程序IPFTP协议TCP协议IP协议IP协议以太网客户服务器数据进入协议栈时的封装数据进入协议栈时的封装用户数据用户数据App头部用户数据TCP头部用户数据TCP头部IP头部用户数据TCP头部IP头部以太网头部以太网尾部以太网帧401500字节FTP客户TCPIP以太网驱动程序TCP段IP分组TCP/

3、IP协议族概貌协议族概貌tcpdumpmroutedpingtracerouteAppl.Appl.TCPUDPICMPIGMPIPv4BPFDLPI数据链路ARPRARPUDP:用户数据报协议用户数据报协议UDP提供无连接服务UDP缺乏可靠性支持,应用程序必须实现:确认、超时、重传、流控等UDP面向记录服务UDP数据报格式数据报格式源端口目的端口长度校验和数据01531struct udphdr u_int16_t source;u_int16_t dest;u_int16_t len;u_int16_t check;TCP:传输控制协议:传输控制协议TCP是面向连接的。TCP提供可靠性,实

4、现了丢失重传。RTT的估算。TCP通过给所发送数据的每一个段管理一个序列号进行排序。TCP提供流量控制和拥塞控制:通告窗口、拥塞窗口。TCP的连接是全双工的。TCP协议数据段格式协议数据段格式HLEN窗口序列号确认号源端口目的端口保留码位校验和紧急指针选项填充字节数据URGACKPSHRSTSYNFIN015317首部数据区TCP连接的建立连接的建立TCP连接的过程:n服务器必须准备好接受外来的连接。通过调用服务器必须准备好接受外来的连接。通过调用socket,bind,listensocket,bind,listen函数完成。称为被动打开。函数完成。称为被动打开。n客户通过调用客户通过调用c

5、onnectconnect进行主动打开。这引起客户进行主动打开。这引起客户TCPTCP发送一个发送一个SYNSYN分节,告诉服务器客户将在连分节,告诉服务器客户将在连接中发送的数据的初始序列号。接中发送的数据的初始序列号。n服务器必须确认客户的服务器必须确认客户的SYNSYN,同时自己也得发送,同时自己也得发送一个一个SYNSYN分节。服务器以单个分节向客户发送分节。服务器以单个分节向客户发送SYNSYN和对客户的和对客户的SYNSYN的的ACKACK。n客户必须确认服务器的客户必须确认服务器的SYNSYN。TCP三次握手三次握手客户服务器SocketConnect(阻塞)(主动打开)Sock

6、et,bind,listen(被动打开)SYN JSYN K,ack J+1ack K+1Accept返回Read阻塞Connect返回TCP连接终止连接终止TCPTCP一般用四个分节终止一个连接:一般用四个分节终止一个连接:n某个进程首先调用某个进程首先调用close,close,这一端的这一端的TCPTCP于是发送于是发送一个一个FINFIN分节,表示数据发送完毕。主动关闭。分节,表示数据发送完毕。主动关闭。n另一端称为被动关闭。另一端称为被动关闭。TCPTCP对接收的对接收的FINFIN分节进分节进行确认,并以文件结束标志传递给应用程序。行确认,并以文件结束标志传递给应用程序。n一段时间

7、后,接收到文件结束标志的应用程序一段时间后,接收到文件结束标志的应用程序调用调用closeclose,这也导致向对方发送一个,这也导致向对方发送一个FINFIN分节。分节。n接收到这个接收到这个FINFIN分节的原发送方分节的原发送方TCPTCP对它进行确对它进行确认。认。TCP连接关闭连接关闭客户服务器Close主动关闭被动关闭Read返回0FIN Mack N+1Closeack M+1FIN N网络中的几类地址网络中的几类地址物理地址:即MAC地址逻辑地址:即IP地址端口地址:区分同一台计算机上不同进程。域名地址:方便人类记忆,最终会转换成IP地址。物理地址物理地址48位:24位OUI,

8、24位由厂商分配平面地址,无结构全球唯一局部范围寻址存在于数据链路层IP地址地址IPIP地址标识着网络一个主机的位置。每个地址标识着网络一个主机的位置。每个IPIP地址都地址都是由是由3232位(或位(或128128位)组成,分成两部分:网络号、位)组成,分成两部分:网络号、主机号。主机号。全球唯一,寻址容易全球唯一,寻址容易两种表示形式:二进制(计算机内部)、点分十进两种表示形式:二进制(计算机内部)、点分十进制(便于记忆)制(便于记忆)IP地址分类地址分类0 NetID10110NetID1110Multicast AddressHostIDNetIDHostIDHostIDA AB BC

9、 CD D8 bits8 bits8 bits8 bits0127128191192223224239端口地址端口地址processprocessprocessprocessprocessprocessIP地址平面A A机机机机B B机机机机端口地址(端口地址(cont.)TCP和UDP使用16位的端口号(用无符号整型表示)为防止端口使用的混乱,将端口分为以下三类:n知名端口:知名端口:0102301023,由,由IANAIANA统一控制统一控制n注册的端口:注册的端口:102449151102449151,这些端口虽不由,这些端口虽不由IANAIANA控制,但控制,但IANAIANA登记这些

10、端口的使用登记这些端口的使用n动态或私有的端口:动态或私有的端口:49152655354915265535网络中通信双方网络中通信双方网络中通信双方由以下四元组唯一确定:n (本地(本地IPIP地址、本地端口号、远程地址、本地端口号、远程IPIP地址、远地址、远程端口号)程端口号)DNS:域名地址:域名地址层次名字空间便于记忆和使用计算机通信时无法使用域名地址解析:n名字到名字到IPIP地址的解析(地址的解析(gethostbynamegethostbyname)nIPIP地址到域名的解析(地址到域名的解析(gethostbyaddrgethostbyaddr)客户客户/服务器例子服务器例子W

11、WW服务服务互联网互联网无连接和面向连接的服务器无连接和面向连接的服务器UDP:无连接交互n n没有可靠保证没有可靠保证没有可靠保证没有可靠保证n n依赖下层系统保证依赖下层系统保证依赖下层系统保证依赖下层系统保证n n程序中应该有相应保障措施程序中应该有相应保障措施程序中应该有相应保障措施程序中应该有相应保障措施TCP:面向连接的交互n n提供传输可靠性提供传输可靠性提供传输可靠性提供传输可靠性n n程序要求简单程序要求简单程序要求简单程序要求简单选用UDP的情况n n下层系统可靠性(例如在局域网环境)下层系统可靠性(例如在局域网环境)下层系统可靠性(例如在局域网环境)下层系统可靠性(例如在

12、局域网环境)n n应用要求应用要求应用要求应用要求n n广播或者组播广播或者组播广播或者组播广播或者组播并发的概念并发的概念并发有真正的并发(并行:Parallelism)和表面上的并发(并发:Concurrency)(一般采用分时机制)并发模型并发模型并发模型并发模型并行模型并行模型并行模型并行模型网络中的并发网络中的并发单个网络各个机器之间许多成对进程好像独立使用网络资源(通道,机器等)一个计算机系统中存在并发(分时)一组机器上所有的客户之间存在并发互联网服务器中的并发服务器中的并发单个服务器必须并发处理多个传入请求并发服务器可以让多个远程用户同时使用服务,实现起来比较复杂其余部分主要介绍

13、术语和概念;涉及其它问题:算法,设计,运行规则等在后续各章介绍互联网客户软件的并发客户软件的并发要使客户软件并发执行,一般并不需要程序员为此特别花功夫。(因此现代操作系统一般允许用户并发地执行客户程序)操作系统的并发功能操作系统的并发功能多进程操作系统进程的概念:进程定义了一个计算的基本单元,它是一个执行某一个特定程序的实体,它拥有独立的地址空间、执行堆栈、文件描述符等。并发和异步并发和异步I/O某些OS允许单个线程控制并发的输入输出操作使用select询问操作系统I/O设备的情况例子:用户从用户从TCPTCP接收数据并且显示,还允许用户接收数据并且显示,还允许用户从键盘输入命令控制显示。从键

14、盘输入命令控制显示。两个输入:两个输入:TCP,TCP,键盘键盘总是等着一个输入,会阻塞总是等着一个输入,会阻塞使用使用selectselect询问输入是否就绪询问输入是否就绪什么是套接字什么是套接字TCP/IP协议存在于协议存在于OS中,网络服务通过中,网络服务通过OS提供提供在在OS中增加支持中增加支持TCP/IP的的系统调用系统调用Berkeley套接字套接字如如socket,connect,send,recv等等套接字套接字API来自来自UNIX系统系统Berkeley套接字套接字v ARPAARPA要求伯克利分校将要求伯克利分校将要求伯克利分校将要求伯克利分校将TCP/IPTCP/I

15、P移植到移植到移植到移植到UNIXUNIX中中中中v 需要创建一个接口,便于应用程序使用这个接需要创建一个接口,便于应用程序使用这个接需要创建一个接口,便于应用程序使用这个接需要创建一个接口,便于应用程序使用这个接口口口口 进行网络通信进行网络通信进行网络通信进行网络通信v 尽可能使用现有的系统调用尽可能使用现有的系统调用尽可能使用现有的系统调用尽可能使用现有的系统调用,同时添加新的系统同时添加新的系统同时添加新的系统同时添加新的系统调用支持调用支持调用支持调用支持TCP/IPTCP/IP。v这个系统被称为这个系统被称为这个系统被称为这个系统被称为BSD UNIX BSD UNIX 套接字,成

16、为事实套接字,成为事实套接字,成为事实套接字,成为事实上的标准上的标准上的标准上的标准指明一个协议接口考虑:接口是专门针对考虑:接口是专门针对TCP/IP,还是可以为还是可以为其它协议所用呢其它协议所用呢?方法一方法一方法一方法一:定义专门支持定义专门支持定义专门支持定义专门支持TCP/IPTCP/IPTCP/IPTCP/IP通信的一些函数通信的一些函数通信的一些函数通信的一些函数方法二方法二方法二方法二:定义支持一般网络通信的函数,用参数是定义支持一般网络通信的函数,用参数是定义支持一般网络通信的函数,用参数是定义支持一般网络通信的函数,用参数是TCP/IPTCP/IPTCP/IPTCP/I

17、P通信作为一种特例通信作为一种特例通信作为一种特例通信作为一种特例BerkeleyBerkeleyBerkeleyBerkeley套接字使用第二种办法,具有通用性,套接字使用第二种办法,具有通用性,套接字使用第二种办法,具有通用性,套接字使用第二种办法,具有通用性,TCP/IPTCP/IPTCP/IPTCP/IP是一个族是一个族是一个族是一个族PF_INETPF_INETPF_INETPF_INET使用服务的类型,而不是指定协议名使用服务的类型,而不是指定协议名使用服务的类型,而不是指定协议名使用服务的类型,而不是指定协议名争论:争论:通用性没有必要,使应用程序难以阅读通用性没有必要,使应用程

18、序难以阅读通用性没有必要,使应用程序难以阅读通用性没有必要,使应用程序难以阅读 通用性可以使程序员免于了解协议族的细节通用性可以使程序员免于了解协议族的细节通用性可以使程序员免于了解协议族的细节通用性可以使程序员免于了解协议族的细节套接字:描述符 OSOS将文件描述符实现为一个指针数组,指向一个内部将文件描述符实现为一个指针数组,指向一个内部将文件描述符实现为一个指针数组,指向一个内部将文件描述符实现为一个指针数组,指向一个内部的数据结构:进程描述符表的下标的数据结构:进程描述符表的下标的数据结构:进程描述符表的下标的数据结构:进程描述符表的下标 套接字和文件类似,每个活动套接字使用一个小整数

19、标套接字和文件类似,每个活动套接字使用一个小整数标套接字和文件类似,每个活动套接字使用一个小整数标套接字和文件类似,每个活动套接字使用一个小整数标识,进程的文件描述符和套接字描述符值不能相同识,进程的文件描述符和套接字描述符值不能相同识,进程的文件描述符和套接字描述符值不能相同识,进程的文件描述符和套接字描述符值不能相同 socketsocket函数:创建套接字描述符(不是函数:创建套接字描述符(不是函数:创建套接字描述符(不是函数:创建套接字描述符(不是openopen函数)函数)函数)函数)0:1:2:3:进程的文件描述符表进程的文件描述符表(一个进程一张)(一个进程一张)用于文件用于文件

20、0的内部数据结构的内部数据结构用于文件用于文件1的内部数据结构的内部数据结构用于文件用于文件2的内部数据结构的内部数据结构用于文件用于文件3的内部数据结构的内部数据结构针对套接字的系统数据结构调用调用socket将创建一个新的描述符条目将创建一个新的描述符条目结构的许多字段是其他的系统调用来填结构的许多字段是其他的系统调用来填0:1:2:3:4:描述符表描述符表(一个进程一张)(一个进程一张)family:PF_INETservice:SOCK_STREAMLocal IP:Remote IP:Local port:Remote port:主动套接字和被动套接字创建方式相同,使用方式不同创建方

21、式相同,使用方式不同等待传入连接的套接字等待传入连接的套接字被动被动,如服务,如服务器套接字器套接字发起连接的套接字发起连接的套接字主动主动,如客户套接,如客户套接字字指明端点地址:创建时不指定,使用时指指明端点地址:创建时不指定,使用时指明明TCP/IPTCP/IP需要指明协议端口号和需要指明协议端口号和需要指明协议端口号和需要指明协议端口号和IPIP地址地址地址地址TCP/IPTCP/IP协议族:协议族:协议族:协议族:PF_INETPF_INET套接字APIint socketint socket(int domain,int type,int protocol)(int domain,

22、int type,int protocol)功能:功能:功能:功能:创建一个新的套接字,返回套接字描述符创建一个新的套接字,返回套接字描述符创建一个新的套接字,返回套接字描述符创建一个新的套接字,返回套接字描述符参数说明:参数说明:参数说明:参数说明:udomain:域类型,指明使用的协议栈,如:域类型,指明使用的协议栈,如TCP/IP使用的是使用的是 PF_INETutype:指明需要的服务类型指明需要的服务类型,如如|SOCK_DGRAM:数据报服务,数据报服务,UDP协议协议|SOCK_STREAM:流服务,流服务,TCP协议协议uprotocol:一般都取一般都取0举例:举例:s=so

23、cket(PF_INET,SOCK_STREAM,0)套接字APIint connect(int sockfd,struct sockaddr*server_addr,int sockaddr_len)功能:功能:同远程服务器建立主动连接,成功时同远程服务器建立主动连接,成功时返回返回0,若连接失败返回,若连接失败返回1。参数说明:参数说明:sockfd:sockfd:套接字描述符,指明创建连接的套接字套接字描述符,指明创建连接的套接字套接字描述符,指明创建连接的套接字套接字描述符,指明创建连接的套接字server_addr:server_addr:指明远程端点:指明远程端点:指明远程端点:指

24、明远程端点:IPIP地址和端口号地址和端口号地址和端口号地址和端口号sockaddr_len:sockaddr_len:地址长度地址长度地址长度地址长度套接字APIstruct sockaddr sa_family_t sa_family;char sa_data14;struct sockaddr_in sa_family_t sin_family;in_port_t sin_port;struct in_addr sin_addr;typedef uint32_t in_addr_t;struct in_addr in_addr_t s_addr;套接字API int send(int s

25、ockfd,const void*data,int data_len,int send(int sockfd,const void*data,int data_len,unsigned int flags)unsigned int flags)功能功能功能功能在在在在TCPTCPTCPTCP连接上发送数据连接上发送数据连接上发送数据连接上发送数据,返回成功传送数据的长度,出错时返返回成功传送数据的长度,出错时返返回成功传送数据的长度,出错时返返回成功传送数据的长度,出错时返回回回回1 1 1 1。sendsendsendsend会将外发数据复制到会将外发数据复制到会将外发数据复制到会将外发数据

26、复制到OSOSOSOS内核中,也可以使用内核中,也可以使用内核中,也可以使用内核中,也可以使用sendsendsendsend发送面发送面发送面发送面向连接的向连接的向连接的向连接的UDPUDPUDPUDP报文。报文。报文。报文。参数说明:参数说明:参数说明:参数说明:uusockfd:sockfd:sockfd:sockfd:套接字描述符套接字描述符套接字描述符套接字描述符uudata:data:data:data:指向要发送数据的指针指向要发送数据的指针指向要发送数据的指针指向要发送数据的指针uudata_len:data_len:data_len:data_len:数据长度数据长度数据长

27、度数据长度uuflags:flags:flags:flags:一直为一直为一直为一直为0 0 0 0套接字APIint sendto(int sockfd,const void*data,int data_len,unsigned int flags,struct sockaddr*remaddr,int remaddr_len)功能:基于功能:基于功能:基于功能:基于UDPUDPUDPUDP发送数据报,返回实际发送的数据长度,出错发送数据报,返回实际发送的数据长度,出错发送数据报,返回实际发送的数据长度,出错发送数据报,返回实际发送的数据长度,出错时返回时返回时返回时返回1 1 1 1 参数

28、说明:参数说明:参数说明:参数说明:sockfd:sockfd:sockfd:sockfd:套接字描述符套接字描述符套接字描述符套接字描述符data:data:data:data:指向要发送数据的指针指向要发送数据的指针指向要发送数据的指针指向要发送数据的指针data_len:data_len:data_len:data_len:数据长度数据长度数据长度数据长度flags:flags:flags:flags:一直为一直为一直为一直为0 0 0 0remaddr:remaddr:remaddr:remaddr:远端地址:远端地址:远端地址:远端地址:IPIPIPIP地址和端口号地址和端口号地址和

29、端口号地址和端口号remaddr_len:remaddr_len:remaddr_len:remaddr_len:地址长度地址长度地址长度地址长度int recv(int sockfd,void*buf,int buf_len,unsigned int int recv(int sockfd,void*buf,int buf_len,unsigned int flags);flags);功能:功能:功能:功能:从从从从TCPTCP接收数据接收数据接收数据接收数据,返回实际接收的数据长度,出错时返回返回实际接收的数据长度,出错时返回返回实际接收的数据长度,出错时返回返回实际接收的数据长度,出错时

30、返回1 1。服务器使用其接收客户请求,客户使用它接受服务器的服务器使用其接收客户请求,客户使用它接受服务器的服务器使用其接收客户请求,客户使用它接受服务器的服务器使用其接收客户请求,客户使用它接受服务器的应答。如果没有数据,将阻塞应答。如果没有数据,将阻塞应答。如果没有数据,将阻塞应答。如果没有数据,将阻塞,如果收到的数据大于缓如果收到的数据大于缓如果收到的数据大于缓如果收到的数据大于缓存的大小,多余的数据将丢弃。也可以使用存的大小,多余的数据将丢弃。也可以使用存的大小,多余的数据将丢弃。也可以使用存的大小,多余的数据将丢弃。也可以使用recvrecv接收面接收面接收面接收面向连接的向连接的向

31、连接的向连接的UDPUDP的报文的报文的报文的报文参数说明:参数说明:参数说明:参数说明:uusockfd:sockfd:套接字描述符套接字描述符套接字描述符套接字描述符uubuf:buf:指向内存块的指针指向内存块的指针指向内存块的指针指向内存块的指针uubuf_len:buf_len:内存块大小,以字节为单位内存块大小,以字节为单位内存块大小,以字节为单位内存块大小,以字节为单位uuflags:flags:一般为一般为一般为一般为0 0 int recvfrom(int sockfd,void*buf,int int recvfrom(int sockfd,void*buf,int buf

32、_len,unsigned int flags,struct sockaddr buf_len,unsigned int flags,struct sockaddr*from,int fromlen);*from,int fromlen);功能:从功能:从功能:从功能:从UDPUDP接收数据,返回实际接收的字节数,失败时接收数据,返回实际接收的字节数,失败时接收数据,返回实际接收的字节数,失败时接收数据,返回实际接收的字节数,失败时返回返回返回返回1 1 参数说明:参数说明:参数说明:参数说明:uusockfd:sockfd:套接字描述符套接字描述符套接字描述符套接字描述符uubuf:buf:

33、指向内存块的指针指向内存块的指针指向内存块的指针指向内存块的指针uubuf_len:buf_len:内存块大小,以字节为单位内存块大小,以字节为单位内存块大小,以字节为单位内存块大小,以字节为单位uuflags:flags:一般为一般为一般为一般为0 0uufrom:from:远端的地址,远端的地址,远端的地址,远端的地址,IPIP地址和端口号地址和端口号地址和端口号地址和端口号uufromlen:fromlen:远端地址长度远端地址长度远端地址长度远端地址长度举例:举例:举例:举例:recvfrom(sockfd,buf,8192,0,recvfrom(sockfd,buf,8192,0,(

34、struct sockaddr,(struct sockaddr*)&address,sizeof(address);*)&address,sizeof(address);套接字API close(int sockfd);功能功能撤销套接字撤销套接字撤销套接字撤销套接字.如果只有一个进程使用,立即终止连接并撤销如果只有一个进程使用,立即终止连接并撤销如果只有一个进程使用,立即终止连接并撤销如果只有一个进程使用,立即终止连接并撤销该套接字,如果多个进程共享该套接字,将引该套接字,如果多个进程共享该套接字,将引该套接字,如果多个进程共享该套接字,将引该套接字,如果多个进程共享该套接字,将引用数减一

35、,如果引用数降到零,则撤销它。用数减一,如果引用数降到零,则撤销它。用数减一,如果引用数降到零,则撤销它。用数减一,如果引用数降到零,则撤销它。参数说明:参数说明:|sockfd:sockfd:套接字描述符套接字描述符套接字描述符套接字描述符int bind(int sockfd,struct sockaddr*my_addr,int addrlen)功能:为套接字指明一个本地端点地址功能:为套接字指明一个本地端点地址功能:为套接字指明一个本地端点地址功能:为套接字指明一个本地端点地址vvTCP/IPTCP/IP协议使用协议使用协议使用协议使用sockaddr_insockaddr_in结构,

36、包含结构,包含结构,包含结构,包含IPIP地址和地址和地址和地址和端口号端口号端口号端口号vv服务器使用它来指明熟知的端口号,然后等待连接服务器使用它来指明熟知的端口号,然后等待连接服务器使用它来指明熟知的端口号,然后等待连接服务器使用它来指明熟知的端口号,然后等待连接参数说明:参数说明:参数说明:参数说明:Sockfd:Sockfd:套接字描述符,指明创建连接的套接字套接字描述符,指明创建连接的套接字套接字描述符,指明创建连接的套接字套接字描述符,指明创建连接的套接字my_addr:my_addr:本地地址,本地地址,本地地址,本地地址,IPIP地址和端口号地址和端口号地址和端口号地址和端口

37、号addrlen:addrlen:地址长度地址长度地址长度地址长度int listen(int sockfd,int input_queue_size)功能:功能:面向连接的服务器使用它将一个套接字置为被动面向连接的服务器使用它将一个套接字置为被动面向连接的服务器使用它将一个套接字置为被动面向连接的服务器使用它将一个套接字置为被动模式,并准备接收传入连接。用于服务器,指模式,并准备接收传入连接。用于服务器,指模式,并准备接收传入连接。用于服务器,指模式,并准备接收传入连接。用于服务器,指明某个套接字连接是被动的明某个套接字连接是被动的明某个套接字连接是被动的明某个套接字连接是被动的参数说明:参

38、数说明:Zsockfd:sockfd:套接字描述符,指明创建连接的套接字套接字描述符,指明创建连接的套接字套接字描述符,指明创建连接的套接字套接字描述符,指明创建连接的套接字Zinput_queue_size:input_queue_size:该套接字使用的队列长度该套接字使用的队列长度该套接字使用的队列长度该套接字使用的队列长度,指指指指定在请求队列中允许的最大请求数定在请求队列中允许的最大请求数定在请求队列中允许的最大请求数定在请求队列中允许的最大请求数 int accept(int sockfd,void*addr,int*addrlen);功能:获取传入连接请求,返回新的连接的套接字描

39、功能:获取传入连接请求,返回新的连接的套接字描功能:获取传入连接请求,返回新的连接的套接字描功能:获取传入连接请求,返回新的连接的套接字描述符。述符。述符。述符。为每个新的连接请求创建了一个新的套接字,服务器只为每个新的连接请求创建了一个新的套接字,服务器只为每个新的连接请求创建了一个新的套接字,服务器只为每个新的连接请求创建了一个新的套接字,服务器只对新的连接使用该套接字,原来的监听套接字接受其他对新的连接使用该套接字,原来的监听套接字接受其他对新的连接使用该套接字,原来的监听套接字接受其他对新的连接使用该套接字,原来的监听套接字接受其他的连接请求。的连接请求。的连接请求。的连接请求。新的连

40、接上传输数据使用新的套接字,使用完毕,服务新的连接上传输数据使用新的套接字,使用完毕,服务新的连接上传输数据使用新的套接字,使用完毕,服务新的连接上传输数据使用新的套接字,使用完毕,服务器将关闭这个套接字。器将关闭这个套接字。器将关闭这个套接字。器将关闭这个套接字。参数说明:参数说明:参数说明:参数说明:sockfd:sockfd:套接字描述符,指明正在监听的套接字套接字描述符,指明正在监听的套接字套接字描述符,指明正在监听的套接字套接字描述符,指明正在监听的套接字addr:addr:提出连接请求的主机地址提出连接请求的主机地址提出连接请求的主机地址提出连接请求的主机地址addrlen:add

41、rlen:地址长度地址长度地址长度地址长度套接字API中的主要系统调用readread和和和和writewrite 在在在在UNIXUNIX和和和和LinuxLinux中,可以代替中,可以代替中,可以代替中,可以代替recvrecv和和和和send,send,因为都因为都因为都因为都调用内核的调用内核的调用内核的调用内核的sosendsosend实现。实现。实现。实现。小结:小结:小结:小结:socketconnectsend(write)recv(read)closebindlistenacceptrecvmsgsendmsgrecvfromsendtoshutdowngetpeername

42、getsockoptsetsockopt用于整数转换的实用例程用于整数转换的实用例程网络字节顺序:最高位字节在前网络字节顺序:最高位字节在前网络字节顺序:最高位字节在前网络字节顺序:最高位字节在前有些套接字例程要求参数按照网络字节顺序存储。有些套接字例程要求参数按照网络字节顺序存储。有些套接字例程要求参数按照网络字节顺序存储。有些套接字例程要求参数按照网络字节顺序存储。如如如如sockaddr_insockaddr_in需要网络字节顺序和本地主机字节顺序进行转换需要网络字节顺序和本地主机字节顺序进行转换需要网络字节顺序和本地主机字节顺序进行转换需要网络字节顺序和本地主机字节顺序进行转换的函数,

43、坚持使用,便于移植。的函数,坚持使用,便于移植。的函数,坚持使用,便于移植。的函数,坚持使用,便于移植。分为短(分为短(分为短(分为短(short 16short 16位位位位)和长(和长(和长(和长(long 32long 32位位位位)两种两种两种两种htons:htons:将一个短整数从本地字节顺序转换为网络字将一个短整数从本地字节顺序转换为网络字将一个短整数从本地字节顺序转换为网络字将一个短整数从本地字节顺序转换为网络字节顺序;节顺序;节顺序;节顺序;ntohs:ntohs:将一个短整数从网络字节顺序转换为本地字将一个短整数从网络字节顺序转换为本地字将一个短整数从网络字节顺序转换为本地

44、字将一个短整数从网络字节顺序转换为本地字节顺序;节顺序;节顺序;节顺序;htonlhtonl和和和和ntohlntohl:长整数网络字节序和本地字节序之:长整数网络字节序和本地字节序之:长整数网络字节序和本地字节序之:长整数网络字节序和本地字节序之间的转换。间的转换。间的转换。间的转换。在程序中使用套接字调用在程序中使用套接字调用使用使用使用使用TCPTCP的客户和服务器套接字函数调用序列的客户和服务器套接字函数调用序列的客户和服务器套接字函数调用序列的客户和服务器套接字函数调用序列socket客户端客户端connectsendrecvclosesocket服务器端服务器端bindlisten

45、acceptclosesendrecv套接符号常量套接符号常量UNIXUNIX系统提供了预定义的符号常量和数据结构系统提供了预定义的符号常量和数据结构系统提供了预定义的符号常量和数据结构系统提供了预定义的符号常量和数据结构来声明数据和指明参数:来声明数据和指明参数:来声明数据和指明参数:来声明数据和指明参数:使用何种服务:使用何种服务:使用何种服务:使用何种服务:S SSOCK_DGRAM:SOCK_DGRAM:数据报服务,数据报服务,数据报服务,数据报服务,UDPUDP协议协议协议协议S SSOCK_STREAM:SOCK_STREAM:流服务,流服务,流服务,流服务,TCPTCP协议协议协

46、议协议S SPF_INETPF_INET:使用:使用:使用:使用TCP/IPTCP/IP协议族协议族协议族协议族S SAF_INET:AF_INET:使用使用使用使用TCP/IPTCP/IP地址结构地址结构地址结构地址结构需要需要需要需要includeinclude,引用出现这些定义的文本,引用出现这些定义的文本,引用出现这些定义的文本,引用出现这些定义的文本#include#include#include#include 需要考虑的问题应用程序必须指明的细节应用程序必须指明的细节客户还是服务器客户还是服务器客户还是服务器客户还是服务器端点地址端点地址端点地址端点地址使用面向连接的还是无连接的

47、使用面向连接的还是无连接的使用面向连接的还是无连接的使用面向连接的还是无连接的如何执行授权和防护准则如何执行授权和防护准则如何执行授权和防护准则如何执行授权和防护准则所需要的缓存的大小等所需要的缓存的大小等所需要的缓存的大小等所需要的缓存的大小等只需要概念性地了解套接字只需要概念性地了解套接字API需要详细了解构造通信程序的各种方法,便需要详细了解构造通信程序的各种方法,便于迅速作出设计决策。于迅速作出设计决策。客户体系结构客户应用程序比较简单:客户应用程序比较简单:不必明显地处理并发性不必明显地处理并发性不需要特权,和常规的应用程序一样执行不需要特权,和常规的应用程序一样执行不需要强行保护,

48、依赖操作系统自动强迫执行不需要强行保护,依赖操作系统自动强迫执行保护保护标识服务器的位置在编译程序时,将服务器的域名或者在编译程序时,将服务器的域名或者IP地址地址说明为常量说明为常量执行快,但是服务器移动后不便执行快,但是服务器移动后不便要求用户在启动程序时标定服务器要求用户在启动程序时标定服务器从稳定的存储设备中获得关于服务器的信息从稳定的存储设备中获得关于服务器的信息如果文件不存在,客户软件就不能执行如果文件不存在,客户软件就不能执行使用某个单独的协议来找到服务器使用某个单独的协议来找到服务器只能在本地小环境下应用只能在本地小环境下应用根据实际情况,综合标识服务器地址根据实际情况,综合标

49、识服务器地址查找域名使用使用sockaddr_in结构指明服务器的地址结构指明服务器的地址X需要二进制表示的需要二进制表示的需要二进制表示的需要二进制表示的32bit IP32bit IP地址地址地址地址套接字对地址转换的支持套接字对地址转换的支持(两个库例程)(两个库例程)Xinet_pton:inet_pton:IPIP地址点分十进制到二进制的转换地址点分十进制到二进制的转换地址点分十进制到二进制的转换地址点分十进制到二进制的转换X X接受一个点分十进制表示的字符串地址,返回一个接受一个点分十进制表示的字符串地址,返回一个接受一个点分十进制表示的字符串地址,返回一个接受一个点分十进制表示的

50、字符串地址,返回一个等价的二进制地址等价的二进制地址等价的二进制地址等价的二进制地址Xgethostbyname:gethostbyname:主机域名到二进制的转换主机域名到二进制的转换主机域名到二进制的转换主机域名到二进制的转换 接受一个机器域名字符串,返回一个接受一个机器域名字符串,返回一个接受一个机器域名字符串,返回一个接受一个机器域名字符串,返回一个hostenthostent结构,结构,结构,结构,内含一个二进制表示的主机内含一个二进制表示的主机内含一个二进制表示的主机内含一个二进制表示的主机IPIP地址地址地址地址TCP客户算法-面向连接的客户找到期望与之通信的服务器IP地址和协议

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

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

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com