欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    《套接口概念》PPT课件.ppt

    • 资源ID:5490839       资源大小:229.49KB        全文页数:27页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《套接口概念》PPT课件.ppt

    第二章 套接口概念,套接口简介域和地址簇地址转换函数利用套接口通信,2.1 套接口简介(1),网间进程通信:单机环境:不同进程用进程号(PID)唯一标识 网络环境:与协议、地址、端口有关端口:进程通过系统调用与某端口建立连接后,传输层通过端口与进程通信。端口操作类似一般的I/O操作,可以用读写原语访问,端口号类似于文件描述符。不同协议(如TCP和UDP)可以有相同的端口号,不冲突。地址:网络地址、主机地址、进程标识(端口号),一个完整的网间进程通信需要三元组(协议,本机地址,本机端口号)或五元组标识(协议,本机地址,本机端口号,远程主机,远程端口号)网络字节顺序:不同计算机存放多字节值顺序不同,网络协议中需指定网络字节顺序。,2.1 套接口简介(2),Client/Server模式:网间进程通信的主要模式是客户机/服务器模式。客户程序向服务程序发请求,服务程序接收来自客户程序的请求并处理,处理后把结果回送给客户,服务进程一般是先于客户请求启动的。这两个进程往往通过网络连接在不同机器上,进程间的通信使用网络编程。Socket:应用程序调用编程接口实现网络编程。Socket(套接字)可以在传输层、网际层和数据链路层上进行编程。,2.1 套接口简介(3),Socket的使用 插座的使用,Socket与插座的类比,2.1 套接口简介(4),Socket类型Internet Socket(Internet地址)UNIX Socket(本地节点路径名)X.25 Socket(X.25地址)只讲Internet Socket,常用类型有:流套接字 SOCK_STREAM:基于TCP协议。数据报套接字 SOCK_DGRAM:基于UDP协议。原始套接字 SOCK_RAM:允许对较低层次协议(如IP、ICMP)直接访问。本地套接字:通过socket技术可以实现不同主机上进程间通信,在单一主机上进程间的通信(IPC)也可用socket技术实现,用于移植远程客户/服务器程序到单一主机上。,2.1 套接口简介(5),使用Socket使用文件描述符 文件描述符是一个和打开的文件相关联的整数,这个文件可以是真正的文件、网络连接、管道、终端等。Socket使用UNIX文件描述符和其他进程通信系统调用。需要一套专用的函数来操作 socket()创建套接口,返回一个文件描述符 connect()、accept()等连接 send()、recv()、read()、write()等读写 close()等关闭套接口,2.2 域和地址族(1),域网络通信需要套接口地址标识自己创建套接口时使用 int socket(int domain,int type,int protocol);AF_INET域使用的数据结构(地址族)通用套接口地址(只是模型)sockaddrInternet(IPv4)套接口地址(AF_INET域)sockaddr_in,取AF_INET,2.2 域和地址簇(2),Socket用到的数据结构(P23)#include(1)存储地址和端口信息的sockaddrstruct sockaddr unsigned short sa_family;/*Internet地址簇,AF_INET*/char sa_data14;/*目标地址和端口信息*/;,通用套接字地址结构图,sin_zero8,IPv4套接字地址结构图,sa_data14,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 的指针和指向sockaddr的指针可互换使用。(3)32位IPv4地址结构in_addr struct in_addr unsigned long s_addr;,2.2 域和地址簇(3),说明:在书中或系统内部定义这些数据结构时,定义了很多宏常量或新的类型名,使用时须逐渐认知。如:sockaddr_in、sockaddr及in_addr结构分别定义如下:typedef uint16_t in_port_t;typedef unsigned short 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;,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 uint16_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;,2.3 地址转换函数(1),字节顺序的转换(网络字节顺序)主机字节顺序:数据在主机上存放的顺序,与CPU类型和操作系统有关,如16位整数7的存放方式:网络字节顺序:数据在网络上传输的顺序,约定高位在先,故一般需要转换。,InterX86系列芯片低位在先,Sun公司Sparc芯片Solaris系统高位在先,2.3 地址转换函数(2),转换函数:(h:主机host,n:网络network)函数htons():指Host to Network Short函数htonl():指Host to Network Long函数ntohs():指Network to Host Short函数ntohl():指Network to Host Long注:struct sockaddr_in 中sin_port 和sin_addr需转换为网络字节顺序;而sin_family不需转换,只被内核调用,不发送到网络,可以是本机字节顺序。,2.3 地址转换函数(3),初始化一个AF_INET地址 struct sockaddr_in adr_inet;/定义变量adr_inet int adr_len;memset(,2.3 地址转换函数(4),Internet IP地址网络地址主机地址网络掩码例:IP地址:202.113.29.19 网络分类:C类网 网络地址:202.113.29.0 主机地址:*.*.*.19 网络掩码:255.255.255.0 广播地址:202.113.29.255,2.3 地址转换函数(5),处理IP地址 需包含以下头文件:arpa/inet.h、netinet/in.h、sys/socket.h(1)点分十进制格式网络地址函数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.32.1”)0)cout“Address Error!”;,2.3 地址转换函数(6),函数inet_aton()原型:int inet_aton(char*src,struct in_addr*dst)例:struct sockaddr_in ina;inet_aton(“162.105.32.1”,2.3 地址转换函数(7),(2)网络地址点分十进制格式函数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 long函数inet_ntop()(不要求)原型:char*inet_ntop(int af,void*src,char*dst,size_t cnt),2.3 地址转换函数(8),例题:源程序名:addr1.cpp可执行程序:addr1功能:用带参数的main()函数输入一个十进制点分格式的IP地址和端口号,输出网络字节顺序的地址和端口号,再将它们转换为十进制点分格式的IP地址和本机顺序端口号并输出。编译连接:g+addr1.cpp o addr1运行程序:./addr1 202.113.29.19 1234执行结果为:320696778 53764 202.113.29.19 1234,2.3 地址转换函数(9),域名服务(简称DNS,将域名转换为网络地址)函数gethostbyname()功能:实现域名(或点分十进制)转换为网络地址包含文件:#include 原型:struct hostent*gethostbyname(char*name);用到的数据结构: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地址*/,2.3 地址转换函数(10),例:struct hostent*he;struct sockaddr_in server;he=gethostbyname(“”);server.sin_addr=*(struct in_addr*)he-h_addr);例题源程序名:addr2.cpp(修改addr1.cpp)可执行程序:addr2功能:用带参数的main()函数输入一个域名和端口号,输出网络字节顺序的地址和端口号,再将它们转换为十进制点分格式的IP地址和本机顺序端口号并输出。运行程序:./addr2 202.113.29.19 1234./addr2 1234 说明:用到gethostbyname()函数,关于地址的获取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);使用命令:hostname 获得主机名more/etc/hosts 查看主机名配置文件,超级用户可以修改.,2.3 地址转换函数(11),端口 当客户要与另一主机上的服务进程进行通信时,除知道IP地址外,还要知道服务进程守侯的端口号。对于服务进程,它监听相应的端口,以接收客户进程的请求。不同的服务对应不同的端口号,其对应关系在文件/etc/services中定义。一般小于1024的端口由UNIX系统保留,大于1024的端口由用户进程使用(102465535)。,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#define 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_TIMESERVER 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,2.4 利用套接口通信(1),连接类型面向连接的方式,即虚电路方式。在两个连接端点间建立一条虚电路,两端点只有在建立连接后才能传输数据,且传输是可靠的(TCP协议),套接口类型用SOCK_STREAM。例如telnet就采用这种方式。无连接方式,即数据报方式。传输报文前不用建立连接。无连接协议的每个报文包含一个完整的传送地址,这种传输是不可靠的(UDP协议),套接口类型用SOCK_DGRAM。例如很多聊天室程序。,2.4 利用套接口通信(2),服务器端建立过程创建socket:socket()绑定本机端口:bind()监听端口:listen()接受连接:accept()连接的数据传输:send()和recv()无连接的数据传输:sendto()和recvfrom()关闭socket:close()客户端建立过程创建socket:socket()建立连接:connect()数据传输:send()和recv()关闭socket:close(),2.4 利用套接口通信(3),Socket用到的.h文件#include 定义与socket有关的宏和函数#include 定义新类型#include 不同的服务对应不同的端口#include 端口号、协议号、IP地址、主机名转换函数#include IP地址、网络顺序地址转换函数#include 定义协议号、端口号等#include 与POSIX和XOPEN标准相关的定义#include 定义了wait()和waitpid()等函数#include 定义了与信号有关的内容#include 定义错误类型#include 内存动态分配函数#include 与线程有关的内容#include 与系统时钟有关的内容#include 定义IP协议相关的宏、结构等#include 定义ICMP协议相关的宏、结构等,

    注意事项

    本文(《套接口概念》PPT课件.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开