第二章套接口概念优秀PPT.ppt

上传人:石*** 文档编号:78952635 上传时间:2023-03-19 格式:PPT 页数:27 大小:1.39MB
返回 下载 相关 举报
第二章套接口概念优秀PPT.ppt_第1页
第1页 / 共27页
第二章套接口概念优秀PPT.ppt_第2页
第2页 / 共27页
点击查看更多>>
资源描述

《第二章套接口概念优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第二章套接口概念优秀PPT.ppt(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第二章套接口概念第一页,本课件共有27页2.1 套接口简介(1)网间进程通信:网间进程通信:单机环境:不同进程用进程号(单机环境:不同进程用进程号(PID)唯一标识)唯一标识 网络环境:与协议、地址、端口有关网络环境:与协议、地址、端口有关端口:端口:进程通过系统调用与某端口建立连接后,传输层通过端口进程通过系统调用与某端口建立连接后,传输层通过端口与进程通信。端口操作类似一般的与进程通信。端口操作类似一般的I/O操作,可以用读写原语操作,可以用读写原语访问,端口号类似于文件描述符。不同协议(如访问,端口号类似于文件描述符。不同协议(如TCP和和UDP)可以有相同的端口号,不冲突。可以有相同的

2、端口号,不冲突。地址:地址:网络地址、主机地址、进程标识(端口号),一个完整的网络地址、主机地址、进程标识(端口号),一个完整的网间进程通信需要三元组网间进程通信需要三元组(协议协议,本机地址本机地址,本机端口号本机端口号)或五元或五元组标识组标识(协议协议,本机地址本机地址,本机端口号本机端口号,远程主机远程主机,远程端口号远程端口号)网络字节顺序:网络字节顺序:不同计算机存放多字节值顺序不同,网络协议不同计算机存放多字节值顺序不同,网络协议中需指定网络字节顺序。中需指定网络字节顺序。第二页,本课件共有27页2.1 套接口简介(2)Client/Server模式:模式:网间进程通信的主要模式

3、是客户机网间进程通信的主要模式是客户机/服务器模式。客户程序向服务器模式。客户程序向服务程序发请求,服务程序接收来自客户程序的请求并处理,服务程序发请求,服务程序接收来自客户程序的请求并处理,处理后把结果回送给客户,服务进程一般是先于客户请求启动处理后把结果回送给客户,服务进程一般是先于客户请求启动的。这两个进程往往通过网络连接在不同机器上,进程间的通的。这两个进程往往通过网络连接在不同机器上,进程间的通信使用网络编程。信使用网络编程。Socket:应用程序调用编程接口实现网络编程。应用程序调用编程接口实现网络编程。Socket(套接字)可(套接字)可以在传输层、网际层和数据链路层上进行编程。

4、以在传输层、网际层和数据链路层上进行编程。第三页,本课件共有27页2.1 套接口简介(3)Socket的使用的使用 插座的使用插座的使用 初始化初始化Socket为为Socket建立连接建立连接应用程序使用应用程序使用Socket比特流通过比特流通过Socket流出流出安装一个插座安装一个插座给插座通电给插座通电电器使用插座电器使用插座电流从插座流出电流从插座流出Socket与插座的类比与插座的类比第四页,本课件共有27页2.1 套接口简介(4)Socket类型类型lInternet Socket(Internet地址)地址)lUNIX Socket(本地节点路径名)(本地节点路径名)lX.2

5、5 Socket(X.25地址)地址)只讲只讲Internet Socket,常用类型有:,常用类型有:l流套接字流套接字 SOCK_STREAM:基于:基于TCP协议。协议。l数据报套接字数据报套接字 SOCK_DGRAM:基于:基于UDP协议。协议。l原始套接字原始套接字 SOCK_RAM:允许对较低层次协议:允许对较低层次协议(如(如IP、ICMP)直接访问。)直接访问。l本地套接字:通过本地套接字:通过socket技术可以实现不同主机上技术可以实现不同主机上进程间通信,在单一主机上进程间的通信进程间通信,在单一主机上进程间的通信(IPC)也也可用可用socket技术实现,用于移植远程客

6、户技术实现,用于移植远程客户/服务器服务器程序到单一主机上。程序到单一主机上。第五页,本课件共有27页2.1 套接口简介(5)使用使用Socket使用文件描述符使用文件描述符 文件描述符是一个和打开的文件相关联的整数,这文件描述符是一个和打开的文件相关联的整数,这个文件可以是真正的文件、网络连接、管道、终端个文件可以是真正的文件、网络连接、管道、终端等。等。Socket使用使用UNIX文件描述符和其他进程通信文件描述符和其他进程通信系统调用。系统调用。需要一套专用的函数来操作需要一套专用的函数来操作 socket()创建套接口,返回一个文件描述符创建套接口,返回一个文件描述符 connect(

7、)、accept()等连接等连接 send()、recv()、read()、write()等读写等读写 close()等关闭套接口等关闭套接口第六页,本课件共有27页2.2 域和地址族(1)域域l网络通信需要套接口地址标识自己网络通信需要套接口地址标识自己l创建套接口时使用创建套接口时使用 int socket(int domain,int type,int protocol);lAF_INET域使用的数据结构域使用的数据结构(地址族地址族)l通用套接口地址(只是模型)通用套接口地址(只是模型)sockaddrlInternet(IPv4)套接口地址套接口地址(AF_INET域域)sockad

8、dr_in取取AF_INET第七页,本课件共有27页2.2 域和地址簇(2)Socket用到的数据结构用到的数据结构(P23)#include(1)存储地址和端口信息的)存储地址和端口信息的sockaddrstruct sockaddr unsigned short sa_family;/*Internet地址簇,AF_INET*/char sa_data14;/*目标地址和端口信息目标地址和端口信息*/;sa_family通用套接字地址结构图sin_family=AF_INETsin_portsin_addrsin_zero8IPv4套接字地址结构图sa_data14第八页,本课件共有27页

9、2.2 域和地址簇(2)(2)INET协议簇地址结构协议簇地址结构sockaddr_in,便于访问便于访问struct sockaddr_in unsigned short sin_family;/*取取AF_INET*/unsigned short sin_port;/*端口号,网络字节顺序端口号,网络字节顺序*/struct in_addr sin_addr;/*IP地址,网络字节顺序地址,网络字节顺序*/unsigned char sin_zero8;/*使用使用bzero()或或memset()全部置全部置0,*/;注:注:指向指向sockaddr_in 的指针和指向的指针和指向soc

10、kaddr的指针可的指针可互换使用。互换使用。(3)32位位IPv4地址结构地址结构in_addr struct in_addr unsigned long s_addr;第九页,本课件共有27页2.2 域和地址簇(3)说明说明:在书中或系统内部定义这些数据结构时,定义了很多宏常在书中或系统内部定义这些数据结构时,定义了很多宏常量或新的类型名,使用时须逐渐认知。如:量或新的类型名,使用时须逐渐认知。如:sockaddr_in、sockaddr及及in_addr结构分别定义如下:结构分别定义如下:typedef uint16_t in_port_t;typedef unsigned short

11、sa_family_t;struct sockaddr_in sa_family_t sin_family;in_port_t sin_port;struct in_addr sin_addr;unsigned char sin_zero8;struct sockaddr sa_family_t sa_family;char sa_data14;第十页,本课件共有27页2.2 域和地址簇(4)typedef uint32_t in_addr_t struct in_addr union struct uint8_t s_b1,s_b2,s_b3,s_b4;_S_un_b;struct uint

12、16_t s_w1,s_w2;_S_un_w;in_addr_t _S_addr;_S_un;#define s_addr _S_un._S_addr;#define s_host _S_un._S_un_b.s_b2;#define s_net _S_un._S_un_b.s_b1;#define s_imp _S_un._S_w.s_w2;#define s_impno _S_un._S_un_b.s_b4;#define s_lh _S_un._S_un_b.s_b3;第十一页,本课件共有27页2.3 地址转换函数(1)字节顺序的转换(网络字节顺序)字节顺序的转换(网络字节顺序)主机字节

13、顺序:主机字节顺序:数据在主机上存放的顺序,与数据在主机上存放的顺序,与CPU类类型和操作系统有关,如型和操作系统有关,如16位整数位整数7的存放方式:的存放方式:网络字节顺序:网络字节顺序:数据在网络上传输的顺序,约定高位数据在网络上传输的顺序,约定高位在先,故一般需要转换。在先,故一般需要转换。07000007InterX86系列芯片系列芯片低位在先低位在先Sun公司公司Sparc芯片芯片Solaris系统系统高位在先高位在先第十二页,本课件共有27页2.3 地址转换函数(2)转换函数:转换函数:(h:主机:主机host,n:网络:网络network)l函数函数htons():指:指Hos

14、t to Network Shortl函数函数htonl():指指Host to Network Longl函数函数ntohs():指:指Network to Host Shortl函数函数ntohl():指指Network to Host Long注注:struct sockaddr_in 中中sin_port 和和sin_addr需转换为网络字节顺序;而需转换为网络字节顺序;而sin_family不需转换,不需转换,只被内核调用,不发送到网络,可以是本机字节顺只被内核调用,不发送到网络,可以是本机字节顺序。序。第十三页,本课件共有27页2.3 地址转换函数(3)初始化一个初始化一个AF_I

15、NET地址地址 struct sockaddr_in adr_inet;/定义变量adr_inet int adr_len;memset(&adr_inet,0,sizeof(adr_inet);/string.h中 /将地址结构adr_inet清0 adr_inet.sin_family=AF_INET;/确定域,从而确定地址族 adr_inet.sin_port=htons(0);/自动选择合适的端口号 adr_inet.sin_addr.s_addr=htonl(INADDR_ANY);/自动填写所运行机器的IP地址 adr_len=sizeof(adr_inet);第十四页,本课件共有

16、27页2.3 地址转换函数(4)Internet IP地址地址l网络地址网络地址l主机地址主机地址l网络掩码网络掩码例例:IP地址地址:202.113.29.19 网络分类:网络分类:C类网类网 网络地址网络地址:202.113.29.0 主机地址主机地址:*.*.*.19 网络掩码网络掩码:255.255.255.0 广播地址广播地址:202.113.29.255第十五页,本课件共有27页2.3 地址转换函数(5)处理处理IP地址地址 需包含以下头文件:需包含以下头文件:arpa/inet.h、netinet/in.h、sys/socket.h(1)点分十进制格式)点分十进制格式网络地址网络

17、地址l函数函数inet_addr()原型原型:unsigned long int inet_addr(char*src)例:例:struct sockaddr_in ina;ina.sin_addr.s_addr=inet_addr(“162.105.32.1”);注注:(1)inet_addr()返回的地址已经是按照网络字节顺序的,返回的地址已经是按照网络字节顺序的,不必调用不必调用htonl()。(2)inet_addr()发生错误时返回发生错误时返回-1,编程时需进行错误检查,如,编程时需进行错误检查,如:if(ina.sin_addr.s_addr=inet_addr(“162.105

18、.32.1”)0)cout“Address Error!”;第十六页,本课件共有27页2.3 地址转换函数(6)l函数函数inet_aton()原型原型:int inet_aton(char*src,struct in_addr*dst)例:例:struct sockaddr_in ina;inet_aton(“162.105.32.1”,&ina.sin_addr);l函数函数inet_pton()(不要求不要求)原型原型:int inet_pton(int af,char*src,struct in_addr*dst)例:例:struct sockaddr_in ina;inet_pton

19、(AF_INET,argv1,&ina.sin_addr);第十七页,本课件共有27页2.3 地址转换函数(7)(2)网络地址网络地址点分十进制格式点分十进制格式l函数函数inet_ntoa()原型原型:char*inet_ntoa(struct in_addr in)例:例:struct sockaddr_in client;coutyou got a connection from n inet_ntoa(client.sin_addr);注注:inet_ntoa()的参数是的参数是struct in_addr,而不是而不是unsigned longl函数函数inet_ntop()(不要求

20、不要求)原型原型:char*inet_ntop(int af,void*src,char*dst,size_t cnt)第十八页,本课件共有27页2.3 地址转换函数(8)例题:l源程序名源程序名:addr1.cppl可执行程序可执行程序:addr1l功能功能:用带参数的用带参数的main()函数输入一个十进制点分格式函数输入一个十进制点分格式的的IP地址和端口号,输出网络字节顺序的地址和端口号,地址和端口号,输出网络字节顺序的地址和端口号,再将它们转换为十进制点分格式的再将它们转换为十进制点分格式的IP地址和本机顺序端地址和本机顺序端口号并输出。口号并输出。l编译连接编译连接:g+addr1

21、.cpp o addr1l运行程序运行程序:./addr1 202.113.29.19 1234l执行结果为执行结果为:320696778 53764 202.113.29.19 1234第十九页,本课件共有27页2.3 地址转换函数(9)域名服务域名服务(简称(简称DNS,将域名转换为网络地址),将域名转换为网络地址)l函数函数gethostbyname()功能:功能:实现域名(或点分十进制)转换为网络地址实现域名(或点分十进制)转换为网络地址包含文件:包含文件:#include 原型:原型:struct hostent*gethostbyname(char*name);用到的数据结构:用到

22、的数据结构:struct hostent char*h_name;/*主机名主机名*/char*h_aliases;/*主机别名数组主机别名数组*/int h_addrtype;/*返回地址类型,常为返回地址类型,常为AF_INET*/int h_length;/*地址长度,用字节数表示地址长度,用字节数表示*/char*h_addr_list;/*主机网络地址数组主机网络地址数组*/;#define h_addr h_addr_list0 /*网络字节顺序的网络字节顺序的IP地址地址*/第二十页,本课件共有27页2.3 地址转换函数(10)例:例:struct hostent*he;stru

23、ct sockaddr_in server;he=gethostbyname(“”);server.sin_addr=*(struct in_addr*)he-h_addr);例题例题l源程序名源程序名:addr2.cpp (修改修改addr1.cpp)l可执行程序可执行程序:addr2l功能功能:用带参数的用带参数的main()函数输入一个域名和端口号,输函数输入一个域名和端口号,输出网络字节顺序的地址和端口号,再将它们转换为十进制出网络字节顺序的地址和端口号,再将它们转换为十进制点分格式的点分格式的IP地址和本机顺序端口号并输出。地址和本机顺序端口号并输出。l运行程序运行程序:./addr

24、2 202.113.29.19 1234 ./addr2 1234 l说明说明:用到用到gethostbyname()函数函数第二十一页,本课件共有27页关于地址的获取struct hostent*he;struct sockaddr_in server;he=gethostbyname(“”);server.sin_addr=*(struct in_addr*)he-h_addr);其中:server.sin_addr=*(struct in_addr*)he-h_addr);可以写作:server.sin_addr.s_addr=*(unsigned long*)he-h_addr);使用

25、命令:hostname 获得主机名more/etc/hosts 查看主机名配置文件,超级用户可以修改.第二十二页,本课件共有27页2.3 地址转换函数(11)端口端口 当客户要与另一主机上的服务进程进行通信时,除知当客户要与另一主机上的服务进程进行通信时,除知道道IP地址外,还要知道服务进程守侯的端口号。对于服地址外,还要知道服务进程守侯的端口号。对于服务进程,它监听相应的端口,以接收客户进程的请求。务进程,它监听相应的端口,以接收客户进程的请求。不同的服务对应不同的端口号,其对应关系在文件不同的服务对应不同的端口号,其对应关系在文件/etc/services中定义。中定义。一般小于一般小于1

26、024的端口由的端口由UNIX系统保留,大于系统保留,大于1024的端口由用户进程使用(的端口由用户进程使用(102465535)。)。第二十三页,本课件共有27页2.3 地址转换函数(12)常见周知口常见周知口(受操作系统保护,服务程序需(受操作系统保护,服务程序需root权限编程)权限编程)/*network standard functions*/*host specific functions*/#define IPPORT_ECHO 7#define IPPORT_ BOOTPS 67#define IPPORT_DISCARD 9#define IPPORT_ BOOTPC68#d

27、efine IPPORT_SYSTAT 11#define IPPORT_ TFTP69#define IPPORT_DAYTIME 13#define IPPORT_ RJE77#define IPPORT_NETSTAT 15#define IPPORT_ FINGER 79#define IPPORT_FTP 21#define IPPORT_ TTYLINK87#define IPPORT_TELNET 23#define IPPORT_ SUPDUP95#define IPPORT_SMTP 25/*Unix TCP sockets*/#define IPPORT_TIMESERVE

28、R 37#define IPPORT_ EXECSERVER 512#define IPPORT_ NAMESERVER 42#define IPPORT_ LOGINSERVER513#define IPPORT_ WHOIS 43#define IPPORT_ CMDSERVER514#define IPPORT_ MTP 57#define IPPORT_ EFSSSERVER520/*Unix UDP sockets*/#define IPPORT_ BIFFUDP512#define IPPORT_ WHOSERVER513#define IPPORT_ ROUTESERVER520

29、第二十四页,本课件共有27页2.4 利用套接口通信(1)连接类型连接类型l面向连接的方式,即虚电路方式。面向连接的方式,即虚电路方式。在两个连接端点间建立一条虚电路,两端点只有在在两个连接端点间建立一条虚电路,两端点只有在建立连接后才能传输数据,且传输是可靠的建立连接后才能传输数据,且传输是可靠的(TCP协议),套接口类型用协议),套接口类型用SOCK_STREAM。例如例如telnet就采用这种方式。就采用这种方式。l无连接方式,即数据报方式。无连接方式,即数据报方式。传输报文前不用建立连接。无连接协议的每个报文传输报文前不用建立连接。无连接协议的每个报文包含一个完整的传送地址,这种传输是不

30、可靠的包含一个完整的传送地址,这种传输是不可靠的(UDP协议)协议),套接口类型用套接口类型用SOCK_DGRAM。例如很多聊天室程序。例如很多聊天室程序。第二十五页,本课件共有27页2.4 利用套接口通信(2)服务器端建立过程服务器端建立过程l创建创建socket:socket()l绑定本机端口:绑定本机端口:bind()l监听端口:监听端口:listen()l接受连接:接受连接:accept()l连接的数据传输:连接的数据传输:send()和和recv()l无连接的数据传输:无连接的数据传输:sendto()和和recvfrom()l关闭关闭socket:close()客户端建立过程客户端

31、建立过程l创建创建socket:socket()l建立连接:建立连接:connect()l数据传输:数据传输:send()和和recv()l关闭关闭socket:close()第二十六页,本课件共有27页2.4 利用套接口通信(3)Socket用到的用到的.h文件文件#include 定义与定义与socket有关的宏和函数有关的宏和函数#include 定义新类型定义新类型#include 不同的服务对应不同的端口不同的服务对应不同的端口#include 端口号、协议号、端口号、协议号、IP地址、主机名转换函数地址、主机名转换函数#include IP地址、网络顺序地址转换函数地址、网络顺序地

32、址转换函数#include 定义协议号、端口号等定义协议号、端口号等#include 与与POSIX和和XOPEN标准相关的定义标准相关的定义#include 定义了定义了wait()和和waitpid()等函数等函数#include 定义了与信号有关的内容定义了与信号有关的内容#include 定义错误类型定义错误类型#include 内存动态分配函数内存动态分配函数#include 与线程有关的内容与线程有关的内容#include 与系统时钟有关的内容与系统时钟有关的内容#include 定义定义IP协议相关的宏、结构等协议相关的宏、结构等#include 定义定义ICMP协议相关的宏、结构等协议相关的宏、结构等第二十七页,本课件共有27页

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

当前位置:首页 > 生活休闲 > 资格考试

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

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