C语言第16章.ppt

上传人:laozhun 文档编号:4515308 上传时间:2023-04-25 格式:PPT 页数:36 大小:2.42MB
返回 下载 相关 举报
C语言第16章.ppt_第1页
第1页 / 共36页
C语言第16章.ppt_第2页
第2页 / 共36页
C语言第16章.ppt_第3页
第3页 / 共36页
C语言第16章.ppt_第4页
第4页 / 共36页
C语言第16章.ppt_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《C语言第16章.ppt》由会员分享,可在线阅读,更多相关《C语言第16章.ppt(36页珍藏版)》请在三一办公上搜索。

1、第十六章 网络编程,第十六章 网络编程,16.1 计算机网络基础16.2 套接字概述16.3 套接字函数16.4 实战练习,本章学习内容,16.1 计算机网络基础,16.1.1 OSI七层参考模型开放系统互联参考模型为实现开放系统互连所建立的通信功能分层模型,简称OSI参考模型,目的是为异种计算机互连提供一个共同的基础和标准框架,并为保持相关标准的一致性和兼容性提供共同的参考这里所说的开放系统实质上指的是遵循OSI参考模型和相关协议能够实现互连的具有各种应用目的的计算机系统,16.1.1 OSI七层参考模型,第7层应用层:负责网络中应用程序与网络操作系统之间的联系第6层表示层:用于确定数据交换

2、的格式,负责设备之间所需要的字符集 和数据转换第5层会话层:建立与其他设备的连接,对会话进行有效的管理第4层传输层:提供会话层和网络层之间的传输服务,16.1.1 OSI七层参考模型,第3层网络层:将传输的数据封包,通过路由选择、分组组合等控制,将 信息从源设备传送到目的设备第2层数据链路层:修正传输过程中的错误信号,提供可靠的通过物理介 质传输数据的方法第1层物理层:提供物理连接,规范网络硬件的特性、规格和传输速度,16.1.2 IP地址,计算机之间通过计算机网络进行通信,通信双方的计算机需要将信息准确地送达对方,需要使网络上的计算机能够识别对方,所以每台计算机需要一个地址来标识自己,这个地

3、址就是IP地址IP地址是IP协议提供的一种统一的地址格式,由32位的二进制数表示最新的IPv6协议将IP地址的位数上升到128位,16.1.2 IP地址,32位IP地址由4个“8位二进制数”构成,通常使用“点分十进制”表示IP地址主要分为前缀和后缀部分,前缀表示计算机所属的物理网络,属于网络地址;后缀表示当前网络地址中的主机地址根据网络号的不同,IP地址分为5类:A类、B类、C类、D类和E类,16.1.2 IP地址,16.1.2 IP地址,特殊的IP地址1.网络地址:主机地址全为0的IP地址表示网络地址,如128.111.0.02.广播地址:主机地址全为1的IP地址表示广播地址,如128.11

4、1.255.2553.回送地址:127.0.0.1表示回送地址,用于测试,16.1.3 网络地址解析,物理地址又称为媒体访问控制地址(MAC)地址解析是将计算机的协议地址解析为物理地址,在网络上通常由地址解析协议(ARP)来实现地址解析ARP协议是在主机ARP高速缓存中存放IP地址到物理地址的映射表,通过查找映射表找到IP地址对应的物理地址,16.1.3 网络地址解析,假设主机A和主机B处于同一个物理网络上,A的IP地址为:192.168.31.2,B的IP地址为:192.168.31.1,ARP协议解析过程:1.主机A从本地ARP缓存中查找192.168.31.1对应的物理地址2.如果A的A

5、RP缓存中没有找到,则发送ARP请求到本地网络上的所有主 机,请求中包含主机B的IP地址,主机A的物理地址和IP地址3.其他主机收到ARP请求后,将B的IP地址与自己的IP地址进行匹配,匹配不成功丢弃该请求;匹配成功添加A的IP地址和物理地址到ARP缓存中,然后将B的IP地址和物理地址发给A4.A收到ARP的回包后,更新自己的缓存,16.1.4 域名系统,IP地址不容易记忆,所以网络上使用主机名来标识IP地址,称为域名例如:其中:主机名www,域名是一级域名,表示商业组织;microsoft为本地域名,16.1.4 域名系统,利用域名进行不同主机间的通信,需要将域名解析为IP地址,这个解析过程

6、称为域名解析(DNS),域名解析通过域名服务器查询域名对应的IP地址1.递归查询:主机本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户身份,向其他根域名继续发送查询域名报文,而不是让该主机自己进行下一步的查询2.迭代查询根域名服务器收到本地域名服务器发送的迭代查询请求报文时,要么给出所要查询的域名对应的IP地址,要么告诉本地域名服务器下一步应该向哪个域名服务器进行查询,16.1.5 TCP/IP协议,TCP/IP能够实现互联网上不同类型操作系统的计算机相互通信,它将网络分为4层,分别对应OSI参考模型的7层结构,16.1.5 TCP/IP协议,1.TCP协议提供可靠数

7、据传输的通用协议,在发送数据时,应用层的数据传输到传输层,加上TCP的首部,数据就构成了报文2.IP协议又称为网际协议,工作在网络层,提供无连接数据报传输,16.1.5 TCP/IP协议,3.ICMP协议网际控制报文协议,负责网络上设备状态的发送和报文检查,可以将某个设备的故障信息发送到其他设备上4.UDP协议面向无连接的协议,为应用程序提供一次性的数据传输服务不提供差错恢复、数据重传,安全性略差,16.1.5 TCP/IP协议,TCP/IP协议提出了端口的概念,用于标识通信的应用程序,当应用程序A与某个端口P绑定后,系统会将收到的发送给P端口的数据发送给应用程序A端口用一个16位的无符号整数

8、值表示,范围为065535低于256的端口号被作为系统的保留端口,用于系统进程通信,不在这一范围的端口号称为自由端口,由应用程序自由使用,16.1.6 网络字节顺序,不同的计算机存放多字节数据的顺序是不同的,按照存放顺序的不同分为两种模式:低位地址存放数据的低位字节,称为小端模式;低位地址存放数据的高位字节,称为大端模式,16.1.6 网络字节顺序,例如:双字节数0 x0001的小端模式存储和大端模式存储,16.1.6 网络字节顺序,说明不同CPU的字节顺序是不同的,这就导致网络数据传输两端的计算机可能会使用字节顺序不同的CPU,当使用小端模式的计算机发送数据后,接收到数据的计算机把数据当作大

9、端模式处理,就会发生错误。为了保证数据的正确性,在网络协议中需要指定网络字节顺序。TCP/IP协议使用大端模式的字节顺序,这样在发送数据时,将数据字节顺序转换成统一的网络字节顺序,再进行传输;而接收端接收到数据后,再将网络字节顺序转换成自己需要的字节顺序,16.2.1 套接字概述,所谓套接字,实际上使一个指向传输提供者的句柄,在WinSock中,就是通过句柄来实现网络通信和管理的。根据性质和作用的不同,套接字可以分为原始套接字、流式套接字和数据包套接字3种。,16.2.2 TCP的套接字的socket编程,基于TCP面向连接的socket编程服务端程序流程1.创建套接字socket2.将创建的

10、套接字绑定(bind)到本地的地址和端口上3.设置套接字的状态为监听状态(listen),准备接收客户端的连接请求4.接收请求(accept),同时返回一个新的用于连接的套接字5.使用新的套接字进行通信(send/recv)6.通信完毕,释放套接字资源(closesocket),16.2.2 TCP的套接字的socket编程,基于TCP面向连接的socket编程的客户端程序流程1.创建套接字socket2.使用创建的套接字,向服务器发送连接请求(connect)3.请求连接成功后,与服务器进行通信(send/recv)4.释放套接字资源(closesocket),16.2.2 TCP的套接字的

11、socket编程,说明服务端建立套接字后,需要将建立的套接字绑定到指定的主机IP和端口上等待客户端的请求,当客户端建立套接字,发起连接请求时,需要指定对方服务器的主机IP和端口,而服务端接收到连接请求并被接受后,就保存了该客户端的IP地址和端口号的信息,这样服务端和客户端就知道了对方的IP地址和端口号,这样就可以利用这些信息进行通信了,16.2.3 UDP的套接字的socket编程,基于UDP面向无连接的socket编程的接收端程序流程1.创建套接字socket2.将创建的套接字绑定(bind)到一个本地IP地址和端口号3.等待接收数据(recvfrom)4.释放套接字资源(closesock

12、et),16.2.3 UDP的套接字的socket编程,基于UDP面向无连接的socket编程的发送端程序流程1.创建套接字socket2.使用创建的套接字向接收端发送数据(sendto)3.释放套接字资源(closesocket),16.2.3 UDP的套接字的socket编程,说明在基于UDP的套接字编程中,还是需要使用bind()函数进行绑定,因为虽然面向无连接的socket编程无须建立连接,但是为了完成通信,首先应该启动接收端来接收发送端发送的数据,这样接收端就必须告诉发送端它的IP地址和端口号,这样才能接收信息。因此必须调用bind()函数将套接字绑定到一个本地IP地址和端口号。,1

13、6.3.1 套接字函数介绍,1.WSAStartup()函数功能:初始化套接字,并进行版本协商原型:int WSAStartup(WORD wVersionRequested,LPWSADATA plWSAData);2.socket()函数功能:创建一个套接字原型:SOCKET socket(int af,int type,int protocol);,16.3.1 套接字函数介绍,3.bind()函数功能:将套接字绑定到指定的IP地址和端口上原型:int bind(SOCKET s,const struct sockaddr FAR*my_addr,int len);4.listen()函

14、数功能:将套接字设置为监听模式原型:int listen(SOCKET s,int backlog);,16.3.1 套接字函数介绍,5.accept()函数功能:接收客户端的连接原型:SOCKET accept(SOCKET s,struct sockaddr FAR*addr,int FAR*len);6.closesocket()函数功能:关闭套接字,释放套接字资源原型:int closesocket(SOCKET s);,16.3.1 套接字函数介绍,7.connect()函数功能:发送一个连接请求原型:int connect(SOCKET s,const struct sockadd

15、r FAR*name,int len);8.htons()函数功能:关闭套接字,释放套接字资源原型:u_short htons(u_short hostshort);,16.3.1 套接字函数介绍,9.htonl()函数功能:将一个无符号长整型数从主机字节顺序转换为网络字节顺序原型:u_long htonl(u_long hostlong);10.inet_addr()函数功能:将一个由字符串表示的地址转换为32位的无符号长整型数原型:unsigned long inet_addr(const char FAR*cp);,16.3.1 套接字函数介绍,11.recv()函数功能:从面向连接的套

16、接字中接收数据原型:int recv(SOCKET s,char FAR*buf,int len,int flags);12.send()函数功能:在面向连接的套接字间发送数据原型:int send(SOCKET s,const char FAR*buf,int len,int flags);,16.3.1 套接字函数介绍,13.recvfrom()函数功能:接收一个数据报信息,并保存源地址原型:int recvfrom(SOCKET s,char FAR*buf,int len,int flags,struct sockaddr FAR*from,int FAR*fromlen);14.sendto()函数功能:向数据接收方发送数据原型:int sendto(SOCKET s,const char FAR*buf,int len,int flags,const struct sockaddr FAR*to,int tolen);15.WSACleanup()函数功能:释放之前初始化的资源原型:int WSACleanup(void);,16.4 实践练习,编写程序,使得客户端与服务端连接,在客户端输入命令后,服务端返回当前的时间信息。,END,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 文秘知识


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号