网络编程OSI开放式系统互联参考模型七层参考模型
- 格式:doc
- 大小:66.00 KB
- 文档页数:19
总结osi七层参考模型各层的功能和特点docOSI七层参考模型是一种计算机网络协议,它用于将网络通信分成七个层次。
每个层次都有其特定的功能,在网络通信过程中扮演不同的角色。
1.物理层(Physical Layer):物理层是网络通信中基础性的层次,其主要功能是通过物理介质传输数据。
在网络通信中,物理层可以处理传输介质的特性,包括电压、传输速率、光信号等等,以及数据传输前后的物理连接和拆卸。
物理层所使用的协议和标准主要涉及到以太网、无线电、红外等等。
2. 数据链路层(Data Link Layer):数据链路层主要负责传输数据的可靠性和正确性。
它将原始数据转换为数据帧,并进行差错校验、流量控制和路由管理。
其主要功能是将传输介质的物理性质抽象为统一的逻辑。
数据链路层的协议包括了以太网、令牌环、帧中继等等。
3. 网络层(Network Layer):网络层主要负责数据的路由和转发,它将数据从通信协议的内部来源传输到目标地址。
网络层主要通过IP地址和MAC地址来确定数据包的路径和传输方式。
网络层协议包括了IP、ICMP、IGMP等等。
传输层主要负责电脑之间传输数据。
它在端到端通信时,确保数据传输的可靠性、完整性和正确性。
此外,传输层还负责流量控制、错误纠正和数据复制的功能。
传输层协议包括了TCP、UDP等等。
会话层提供了一系列数据传输的控制和管理。
其主要功能是创建、管理和维护电脑之间的会话和连接状态。
在会话过程中,会话层可以控制数据流的方向、数据分组的大小以及协调多个线程之间数据的交换。
会话层协议包括了NFS、SQL等等。
表示层负责数据表示和编码。
它将数据转换为可读的格式,并将其编码为特定的协议,以在不同计算机之间传输。
表示层还负责加密和解密数据,并通过压缩和解压缩技术来减少网络流量。
表示层协议包括了JPEG、MPEG等等。
应用层是最高级别的层次,其主要功能是提供电脑之间应用程序的交互。
应用层主要提供了可视化的用户界面和输入输出设备,允许用户和应用程序之间进行交互操作。
OSI参考模型OSI(Open System Interconnect),即开放式系统互联。
一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互联模型。
该体系结构标准定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层和应用层),即ISO开放系统互连参考模型。
在这一框架下进一步详细规定了每一层的功能,以实现开放系统环境中的互连性、互操作性和应用的可移植性。
简介:开放系统OSI标准定制过程中所采用的方法是将整个庞大而复杂的问题划分为若干个容易处理的小问题,这就是分层的体系结构方法。
在OSI中,采用了三级抽象,即体系结构、服务定义和协议规定说明。
OSI参考模型定义了开放系统的层次结构、层次之间的相互关系及各层所包含的可能的服务。
它是作为一个框架来协调和组织各层协议的制定,也是对网络内部结构最精练的概括与描述进行整体修改。
OSI的服务定义详细说明了各层所提供的服务。
某一层的服务就是该层及其下各层的一种能力,它通过接口提供给更高一层。
各层所提供的服务与这些服务是怎么实现的无关。
同时,各种服务定义还定义了层与层之间的接口和各层的所使用的原语,但是不涉及接口是怎么实现的。
OSI标准中的各种协议精确定义了应当发送什么样的控制信息,以及应当用什么样的过程来解释这个控制信息。
协议的规程说明具有最严格的约束。
ISO/OSI参考模型并没有提供一个可以实现的方法。
ISO/OSI 参考模型只是描述了一些概念,用来协调进程间通信标准的制定。
在OSI范围内,只有在各种的协议是可以被实现的而各种产品只有和OSI的协议相一致才能互连。
这也就是说,OSI参考模型并不是一个标准,而只是一个在制定标准时所使用的概念性的框架。
在历史来看,在制定计算机网络标准方面起着很大作用的两大国际组织是CCITT和ISO。
CCITT与ISO TC97的工作领域是不同的,CCITT主要是从通信角度考虑一些标准的制定,而ISO的TC97则关心信息的处理与网络体系结构。
OSI七层模型和TCPIP模型及对应协议(详解)1.OSI七层模型OSI(Open Systems Interconnection)七层模型是国际标准化组织(ISO)制定的一种网络体系结构模型,将计算机网络的功能划分为七个层次,每个层次负责不同的任务。
这些层次从底层到顶层分别为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
-物理层:负责传输比特流,即原始的0和1的比特流。
-数据链路层:将物理层传输的数据流划分为数据帧,并在物理传输媒介上发送和接收数据帧。
-网络层:负责通过不同网络节点进行数据的路由和转发,实现数据包的传输。
-传输层:负责端到端的通信连接,在传输过程中确保数据的可靠传输和错误控制。
-会话层:负责建立、管理和终止应用程序之间的通信会话。
-表示层:负责数据的格式化和解码、加密和解密,确保接收方能够正确理解发送方的数据。
-应用层:提供用户与网络的接口,支持各种应用程序的网络访问和通信。
2.TCP/IP模型TCP/IP模型是一种通信协议体系结构,目前是互联网的基础协议。
TCP/IP模型由四个层次构成,分别为网络接口层、互联网层、传输层和应用层。
-网络接口层:负责将数据帧从物理层传输到网络层,并对数据进行分割和重组。
-互联网层:负责将数据包从源主机传输到目的主机,包括IP协议、ARP协议和ICMP协议等。
-传输层:负责数据的可靠传输和错误控制,包括TCP(传输控制协议)和UDP(用户数据报协议)等。
-应用层:提供用户与网络的接口,支持各种应用程序的网络访问和通信,包括HTTP、FTP、SMTP等协议。
3.OSI七层模型和TCP/IP模型的对应关系及协议:-OSI的物理层对应TCP/IP的网络接口层,协议包括以太网、Wi-Fi 等。
-OSI的数据链路层对应TCP/IP的网络接口层,协议包括以太网、Wi-Fi等。
-OSI的网络层对应TCP/IP的互联网层,协议包括IP、ARP、ICMP等。
OSI七层模型基础知识及各层常见应用OSI Open Source Initiative(简称OSI,有译作开放源代码促进会、开放原始码组织)是一个旨在推动开源软件发展的非盈利组织。
OSI参考模型(OSI/RM)的全称是开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它是由国际标准化组织ISO提出的一个网络系统互连模型。
它是网络技术的基础,也是分析、评判各种网络技术的依据,它揭开了网络的神秘面纱,让其有理可依,有据可循。
一、OSI参考模型知识要点图表1:OSI模型基础知识速览模型把网络通信的工作分为7层。
1至4层被认为是低层,这些层与数据移动密切相关。
5至7层是高层,包含应用程序级的数据。
每一层负责一项具体的工作,然后把数据传送到下一层。
由低到高具体分为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
第7层应用层—直接对应用程序提供服务,应用程序可以变化,但要包括电子消息传输第6层表示层—格式化数据,以便为应用程序提供通用接口。
这可以包括加密服务第5层会话层—在两个节点之间建立端连接。
此服务包括建立连接是以全双工还是以半双工的方式进行设置,尽管可以在层4中处理双工方式第4层传输层—常规数据递送-面向连接或无连接。
包括全双工或半双工、流控制和错误恢复服务第3层网络层—本层通过寻址来建立两个节点之间的连接,它包括通过互连网络来路由和中继数据第2层数据链路层—在此层将数据分帧,并处理流控制。
本层指定拓扑结构并提供硬件寻址第1层物理层—原始比特流的传输电子信号传输和硬件接口数据发送时,从第七层传到第一层,接受方则相反。
各层对应的典型设备如下:应用层………………。
计算机:应用程序,如FTP,SMTP,HTTP表示层………………。
计算机:编码方式,图像编解码、URL字段传输编码会话层………………。
计算机:建立会话,SESSION认证、断点续传传输层………………。
OSI Open Source Initiative(简称OSI,有译作开放源代码促进会、开放原始码组织)是一个旨在推动开源软件发展的非盈利组织。
OSI参考模型(OSI/RM)的全称是开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它是由国际标准化组织ISO提出的一个网络系统互连模型。
它是网络技术的基础,也是分析、评判各种网络技术的依据,它揭开了网络的神秘面纱,让其有理可依,有据可循。
一、OSI参考模型知识要点图表1:OSI模型基础知识速览模型把网络通信的工作分为7层。
1至4层被认为是低层,这些层与数据移动密切相关。
5至7层是高层,包含应用程序级的数据。
每一层负责一项具体的工作,然后把数据传送到下一层。
由低到高具体分为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
第7层应用层—直接对应用程序提供服务,应用程序可以变化,但要包括电子消息传输第6层表示层—格式化数据,以便为应用程序提供通用接口。
这可以包括加密服务第5层会话层—在两个节点之间建立端连接。
此服务包括建立连接是以全双工还是以半双工的方式进行设置,尽管可以在层4中处理双工方式第4层传输层—常规数据递送-面向连接或无连接。
包括全双工或半双工、流控制和错误恢复服务第3层网络层—本层通过寻址来建立两个节点之间的连接,它包括通过互连网络来路由和中继数据第2层数据链路层—在此层将数据分帧,并处理流控制。
本层指定拓扑结构并提供硬件寻址第1层物理层—原始比特流的传输电子信号传输和硬件接口数据发送时,从第七层传到第一层,接受方则相反。
各层对应的典型设备如下:二、OSI基础知识OSI/RM参考模型的提出世界上第一个网络体系结构由IBM公司提出(74年,SNA),以后其他公司也相继提出自己的网络体系结构如:Digital公司的DNA,美国国防部的TCP/IP等,多种网络体系结构并存,其结果是若采用IBM的结构,只能选用IBM的产品,只能与同种结构的网络互联。
开放系统互连参考模型(Open System Interconnect 简称OSI)是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放式互连信息系统提供了一种功能结构的框架。
它从低到高分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
特点开放系统互连参考模型的特点:①每层的对应实体之间都通过各自的协议进行通信。
②各个计算机系统都有相同的层次结构。
③不同系统的相应层次具有相同的功能。
④同一系统的各层次之间通过接口联系。
⑤相邻的两层之间,下层为上层提供服务,上层使用下层提供的服务。
参考模型层次划分原则OSI将整个通信功能划分为7个层次,划分的原则如下:(1)网络中所有节点都划分为相同的层次结构,每个相同的层次都有相同的功能。
(2)同一节点内各相邻层次间可通过接口协议进行通信。
(3)每一层使用下一层提供的服务,并向它的上层提供服务。
(4)不同节点的同等层按照协议实现同等层之间的通信。
各层次功能物理层物理层并不是物理媒体本身,它只是开放系统中利用物理媒体实现物理连接的功能描述和执行连接的规程。
物理层提供用于建立、保持和断开物理连接的机械的、电气的、功能的和过程的条件。
简而言之,物理层提供有关同步和比特流在物理媒体上的传输手段,其典型的协议有EIA-232-D等。
数据链路层数据链路层用于建立、维持和拆除链路连接,实现无差错传输的功能。
在点到点或点到多点的链路上,保证信息的可靠传递。
该层对连接相邻的通路进行差错控制、数据成帧、同步等控制。
检测差错一般采用循环冗余校验(CRC),纠正差错采用计时器恢复和自动请求重发(ARQ)等技术。
其典型的协议有OSI标准协议集中的高级数据链路控制协议HDLC。
网络层网络层规定了网络连接的建立、维持和拆除的协议。
它的主要功能是利用数据链路层所提供的相邻节点间的无差错数据传输功能,通过路由选择和中继功能,实现两个系统之间的连接。
osi七层模型各个层次的作用及单位OSI(Open Systems Interconnection)七层模型是计算机网络通信协议的基本参考模型,它将网络通信过程分成七个层次,每个层次都有其特定的功能和责任。
以下是对每个层次的详细介绍及其单位的说明。
1. 物理层(Physical Layer):物理层是网络通信的最底层,它负责控制电脑与通信设备之间的物理连接。
在这一层,数据被转化成一系列的电子、光纤或者无线信号进行传输。
主要功能包括:信号发送和接收、物理介质的编码、调制和解调等。
其单位是比特(bit)。
2. 数据链路层(Data Link Layer):数据链路层建立了物理连接的两个节点之间的通信,负责将原始的比特流划分成有意义的数据帧,并进行差错检测和纠正。
主要功能包括:帧封装、链路管理、帧同步、流量控制等。
其单位是帧(frame)。
3. 网络层(Network Layer):网络层负责将数据从源节点传输到目的节点,通过选址和路由选择等机制,实现了跨不同网络的数据传输。
主要功能包括:数据包的转发与路由选择、拥塞控制、地址转换等。
其单位是数据包(packet)。
4. 传输层(Transport Layer):传输层负责端到端的可靠传输,将数据分割成较小的数据块并对其进行编号和检测。
主要功能包括:分段、数据流控制、差错校验等。
其单位是段(segment)。
5. 会话层(Session Layer):会话层负责建立、管理和终止应用程序之间的会话。
主要功能包括:建立和维护会话、会话同步、流量控制等。
6. 表示层(Presentation Layer):表示层负责数据的格式化、编码和解码,以确保不同主机上的应用程序能够正确地解释和处理数据。
主要功能包括:数据格式转换、数据加密、数据压缩等。
7. 应用层(Application Layer):应用层是最顶层的层次,为用户提供应用程序访问网络的接口,处理特定的网络应用。
OSI七层参考模型概论与详解⼀. OSI七层模型OSI七层参考模型的各个层次的划分遵循下列原则:1、同⼀层中的各⽹络节点都有相同的层次结构,具有同样的功能。
(⽹路中各结点都有相同的层次;不同结点的同等层具有相同的功能。
)2、同⼀节点内相邻层之间通过接⼝(可以是逻辑接⼝)进⾏通信。
3、每⼀层使⽤下⼀层提供的服务,并且向其上层提供服务。
4、不同节点的同等层按照协议实现对等层之间的通信。
概述OSI七层参考模型各层的作⽤:1、物理层:在物理媒体上传输原始的数据⽐特流。
2、数据链路层:将数据分成⼀个个数据帧,以数据帧为单位传输。
有应有答,遇错重发。
3、⽹络层:将数据分成⼀定长度的分组,将分组穿过通信⼦⽹,从信源选择路径后传到信宿。
4、传输层:提供不具体⽹络的⾼效、经济、透明的端到端数据传输服务。
5、会话层:进程间的对话也称为会话,会话层管理不同主机上各进程间的对话。
7、应⽤层:提供应⽤程序访问OSI环境的⼿段。
⼆. 开放式系统互联七层模型详解OSI是Open System Interconnect的缩写,意为开放式系统互联。
第⼀层:物理层(Physical Layer) (单位:⽐特bit)物理层定义了所有电⼦及物理设备的规范,为上层的传输提供了⼀个物理介质,本层中数据传输的单位为⽐特(bit)。
属于本层定义的规范有EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等,实际使⽤中的设备如⽹卡等属于本层。
规定通信设备的机械的、电⽓的、功能的和过程的特性,⽤以建⽴、维护和拆除物理链路连接。
具体地讲,机械特性规定了⽹络连接时所需接插件的规格尺⼨、引脚数量和排列情况等;电⽓特性规定了在物理连接上传输bit流时线路上信号电平的⼤⼩、阻抗匹配、传输速率距离限制等;功能特性是指对各个信号先分配确切的信号含义,即定义了DTE和DCE之间各个线路的功能;规程特性定义了利⽤信号线进⾏bit流传输的⼀组操作规程,是指在物理连接的建⽴、维护、交换信息是,DTE和DCE双放在各电路上的动作系列。
O S I七层模型基础知识及各层常见应用Revised by Petrel at 2021O S I七层模型基础知识及各层常见应用OSIOpenSourceInitiative(简称OSI,有译作开放源代码促进会、开放原始码组织)是一个旨在推动开源软件发展的非盈利组织。
OSI参考模型(OSI/RM)的全称是开放系统互连参考模型(OpenSystemInterconnectionReferenceModel,OSI/RM),它是由国际标准化组织ISO提出的一个网络系统互连模型。
它是网络技术的基础,也是分析、评判各种网络技术的依据,它揭开了网络的神秘面纱,让其有理可依,有据可循。
一、OSI参考模型知识要点图表1:OSI模型基础知识速览模型把网络通信的工作分为7层。
1至4层被认为是低层,这些层与数据移动密切相关。
5至7层是高层,包含应用程序级的数据。
每一层负责一项具体的工作,然后把数据传送到下一层。
由低到高具体分为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
第7层应用层—直接对应用程序提供服务,应用程序可以变化,但要包括电子消息传输第6层表示层—格式化数据,以便为应用程序提供通用接口。
这可以包括加密服务第5层会话层—在两个节点之间建立端连接。
此服务包括建立连接是以全双工还是以半双工的方式进行设置,尽管可以在层4中处理双工方式第4层传输层—常规数据递送-面向连接或无连接。
包括全双工或半双工、流控制和错误恢复服务?第3层网络层—本层通过寻址来建立两个节点之间的连接,它包括通过互连网络来路由和中继数据第2层数据链路层—在此层将数据分帧,并处理流控制。
本层指定拓扑结构并提供硬件寻址第1层物理层—原始比特流的传输电子信号传输和硬件接口数据发送时,从第七层传到第一层,接受方则相反。
各层对应的典型设备如下:应用层……………….计算机:应用程序,如FTP,SMTP,HTTP表示层……………….计算机:编码方式,图像编解码、URL字段传输编码会话层……………….计算机:建立会话,SESSION认证、断点续传传输层……………….计算机:进程和端口网络层…………………网络:路由器,防火墙、多层交换机数据链路层………..网络:网卡,网桥,交换机物理层…………………网络:中继器,集线器、网线、HUB二、OSI基础知识OSI/RM参考模型的提出世界上第一个网络体系结构由IBM公司提出(74年,SNA),以后其他公司也相继提出自己的网络体系结构如:Digital公司的DNA,美国国防部的TCP/IP等,多种网络体系结构并存,其结果是若采用IBM的结构,只能选用IBM的产品,只能与同种结构的网络互联。
通俗讲解OSI七层模型国际标准化组织 ISO 于 1983 年正式提出了开放式系统互联模型(通称 ISO/OSI)。
将整个⽹络通信的功能划分为 7 个层次OSI参考模型将整个⽹络通信的功能划分为 7 个层次,这些层就像我们吃的洋葱、卷⼼菜的⼀样:每⼀层都将其下⾯的层遮起来。
下⼀层次的细节被隐藏起来。
如果你将洋葱⽪剥开往⾥看,你⼀定会流下许多眼泪,OSI模型也是如此,越往下看越难理解,只要你不怕流泪、⿇烦,不放弃你就会成功。
物理层:⽹卡,⽹线,集线器,中继器,调制解调器数据链路层:⽹桥,交换机⽹络层:路由器⽹关⼯作在第四层传输层及其以上集线器是物理层设备,采⽤⼴播的形式来传输信息。
交换机就是⽤来进⾏报⽂交换的机器。
多为链路层设备(⼆层交换机),能够进⾏地址学习,采⽤存储转发的形式来交换报⽂.。
路由器的⼀个作⽤是连通不同的⽹络,另⼀个作⽤是选择信息传送的线路。
选择通畅快捷的近路,能⼤⼤提⾼通信速度,减轻⽹络系统通信负荷,节约⽹络系统资源,提⾼⽹络系统畅通率。
交换机和路由器的区别交换机拥有⼀条很⾼带宽的背部总线和内部交换矩阵。
交换机的所有的端⼝都挂接在这条总线上,控制电路收到数据包以后,处理端⼝会查找内存中的地址对照表以确定⽬的MAC(⽹卡的硬件地址)的NIC(⽹卡)挂接在哪个端⼝上,通过内部交换矩阵迅速将数据包传送到⽬的端⼝,⽬的MAC若不存在则⼴播到所有的端⼝,接收端⼝回应后交换机会“学习”新的地址,并把它添加⼊内部MAC地址表中。
使⽤交换机也可以把⽹络“分段”,通过对照MAC地址表,交换机只允许必要的⽹络流量通过交换机。
通过交换机的过滤和转发,可以有效的隔离⼴播风暴,减少误包和错包的出现,避免共享冲突。
交换机在同⼀时刻可进⾏多个端⼝对之间的数据传输。
每⼀端⼝都可视为独⽴的⽹段,连接在其上的⽹络设备独⾃享有全部的带宽,⽆须同其他设备竞争使⽤。
当节点A向节点D发送数据时,节点B可同时向节点C发送数据,⽽且这两个传输都享有⽹络的全部带宽,都有着⾃⼰的虚拟连接。
OSI七层模型基本介绍:什么是OSI参考模型?(开放式系统互联)、 参考模型的由来:在 世纪 年代,那时已经实现了基本的计算机网络的互联结构。
只是当时的网络结构都是各个厂家自己私有的,比如 的 标准、 的 、美国国防部的 等等。
如果将两个不同厂家的产品放在一起使用,由于各厂家产品使用的的标准不一致,可能会涉及到不兼容的问题。
比如:公司使用的是 的网络标准、 公司使用的 标准。
两家公司是单独的网络,运行起来没有任何问题。
假如有一天, 公司将 公司收购了,而且网络也需要整合到一起,这时,由于两家公司在初建网络时,使用了不同厂家的标准,于是网络就不能兼容了,只能推翻某一家公司之前的网络,重新用相同的一种网络标准来组网。
这样的兼容性状况在当时常有发生。
于是国际标准化组织( ),在 年成立了一个委员会,推出了一套层次化结构的网络模型,这套模型就是《 参考模型》。
参考模型对网络结构进行了层次化的划分,共分为了七层,所以我们也经常称 参考模型为 七层模型 :应用层表示层会话层传输层网络层数据链路层物理层对于 参考模型的结构,就如同公司的结构:董事会、财务部、销售部、技术部等等,各兼所职,缺一不可。
在一个主机到主机的通讯过程中, 参考模型的这七层各兼所职,每层都完成一定的功能。
参考模型一共有七层结构,其中:上三层主要与网络应用相关,负责对用户数据进行编码等操作。
下四层主要是负责网络通讯,负责将用户的数据传递到目的地。
如下图:、 对网络通讯过程分层有什么好处?七层模型之所以要对网络分层,主要是在网络通讯的整个过程中,将整个流程细化开来,每一层完成各自的事情,互不干扰。
在一个端到端的通讯过程中,比如我们打开了一个浏览器,输入一串网址 ,回车就可以进入到我们 的网站中,这么一个操作对于我们日常上网来说是再简单不过的事情,不过,对于整个数据传递的流程却是非常复杂的。
就好比说,两个公司之间洽谈业务,也许在外人看来,只有成功或者失败两个结果,但是中间的过程和内容却是异常的复杂。
网络编程,OSI(开放式系统互联参考模型)七层参考模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。 套接字(Socket)是网络通信的基本构建模块,又分为流式套接字(Stream Socket)和数据报套接字(Datagram Socket)两种类型的套接字。 TCP:传送控制协议(Transmission Control Protocol),这是一种提供给用户的可靠的全双工字节流面向连接的协议。 UDP:用户数据报协议(User Datagram Protocol),这是提供给用户进程的无连接协议,用于传送数据而不执行正确性检查。 当然TCP、UDP都归属于传输层协议。
对所用的网络知识简短的介绍,下面步入正题,开始Qt套接字编程~ 在TCP/IP网络中两个进程间的相互作用的主要模式是客户机/服务器模式(Client/Server model),是构造分布式应用程序最常用的模式。 Qt中几乎所有的QtNetwork类都是异步的,一般情况下没有必要Socket使用在多线程中。 ■、UDP UDP是不可信赖的,它是基于包的协议。一些应用程序层的协议使用UDP是因为它比TCP更加小巧,数据是从一个主机到另一个主机以包的形式发送的。这里没有连接到的概念,并且如果一个UDP包没有被正确交付,它不会向系统报告任何错误。 下面写一个简单的广播示例,由客户端和服务器两部分组成。 //客户端发送数据 void Client::sendDatagram() { QByteArray datagram; QDataStream out(&datagram, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_4_3); out << QDateTime::currentDateTime() << "vic.MINg!" << 3.14; QUdpSocket udpSocket(this); udpSocket.writeDatagram(datagram, QHostAddress::Broadcast, 1981); } 在QByteArray型局部变量datagram中构建待发送的数据包,然后通过QUdpSocket类的 writeDatagram ( const QByteArray & datagram, const QHostAddress & host, quint16 port );函数将数据包发出。值得注意的是,这里的地址使用了QHostAddress::Broadcast值,它对应IPv4下的广播地址,如果将该值更换成单机地址(如本机地址QHostAddress::LocalHost),将变成一个普通的点对点的UDP程序。 //服务器接收数据 void Server::initSocket() { udpSocket = new QUdpSocket(this); udpSocket->bind(1981); connect(udpSocket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams())); } 初始化生成QUdpSocket实例,并绑定与客户端约定的端口(1981)。这里多说几句,在编写网络程序时应该使用1024以上的端口号,1024以下的端口号通常被系统保留,紧密的绑定了一些服务(如80端口是http服务、21端口是ftp服务)。 void Server::readPendingDatagrams() { while (udpSocket->hasPendingDatagrams()) { QByteArray datagram; datagram.resize(udpSocket->pendingDatagramSize()); QHostAddress sender; quint16 senderPort; udpSocket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort); QDateTime dateTime; QString name; double data; QDataStream in(&datagram, QIODevice::ReadOnly); in.setVersion(QDataStream::Qt_4_3); in >> dateTime >> name >> data; } } 接受数据函数首先调用QUdpSocket类的成员函数hasPendingDatagrams()以判断是否有可供读取的数据。如果有则通过pendingDatagramSize()获取当前可供读取的UDP报文大小,并据此大小分配接收缓冲区,最后读取相应数据。
■、TCP TCP是一个基于流的协议。对于应用程序,数据表现为一个长长的流,而不是一个大大的平面文件。基于TCP的高层协议通常是基于行的或者基于块的。 ●、基于行的协议把数据作为一行文本进行传输,每行都以一个换行符结尾。 ●、基于块的协议把数据作为二进制块进行传输,每块是由一个size大小字段和紧跟它的一个size字节的数据组成。 QTcpSocket通过器父类QAbstractSocket继承了QIODevice,因此他可以通过使用QTextStream和QDataStream来进行读取和写入。 QTcpServer类在服务器端处理来自TCP客户端连接数据,需要注意的是,该类直接继承于QObject基类,而不是QAbstractSocket抽象套接字类。 下面介绍一个TCP应用示例,示例来自《精通Qt4编程》,感觉十分不错,它也是由客户端和服务器两部分组成,客户端选择本地文件,并通过TCP连接将它上传到服务器端。 由于使用了TCP协议,所以可以轻松的传递大文件,而无需担心传输过程造成文件损坏。 其中客户端程序SendFile从本地文件系统中选中一个已有文件并在成功连接服务器后开始发送,服务器端程序ReceiveFile则将该文件保存在当前目录下,两端均以进度条和数据两种形式分别显示文件传输进度和详细的数据传输字节数。 客户端程序SendFile的用户界面是一个简单的对话框,上面布置一个QProgressBar进度条,一个用于显示状态的QLabel,三个QPushButton按钮,分别用来选择文件、发送文件和退出程序。 Qt的QFileDialog类提供了一个文件选择对话框,用户使用它可以很容易的进行目录或文件的选择。 下面将Dialog类部分代码陈列出来,它是QDialog的子类,实现客户端的全部功能。 class Dialog : public QDialog { Q_OBJECT public: Dialog(QWidget *parent = 0); public slots: void start(); void startTransfer(); void updateClientProgress(qint64 numBytes); void displayError(QAbstractSocket::SocketError socketError); void openFile(); private: QProgressBar *clientProgressBar; QLabel *clientStatusLabel; QPushButton *startButton; QPushButton *quitButton; QPushButton *openButton; QDialogButtonBox *buttonBox; QTcpSocket tcpClient; //客户端套接字 qint64 TotalBytes; //总共需发送的字节数 qint64 bytesWritten; //已发送字节数 qint64 bytesToWrite; //待发送字节数 qint64 loadSize; //被初始化为一个4Kb的常量 QString fileName; //待发送的文件的文件名 QFile *localFile; //待发送的文件 QByteArray outBlock; //缓存一次发送的数据 }; 为了发送较大的文件,变量使用了qint64类型,Qt保证该类型数据在所有其所支持的平台下均为64位大小,这几乎可以表示一个无限大的文件了。 loadSize用来尽可能的将一个较大的文件分割,每次发送4Kb大小,余下不足4Kb的按实际大小发送。 Dialog::Dialog(QWidget *parent) : QDialog(parent) { loadSize = 4*1024; // 4Kb TotalBytes = 0; bytesWritten = 0; bytesToWrite = 0; clientProgressBar = new QProgressBar; clientStatusLabel = new QLabel(tr("客户端就绪")); startButton = new QPushButton(tr("开始")); quitButton = new QPushButton(tr("退出")); openButton = new QPushButton (tr("打开")); startButton->setEnabled(false); buttonBox = new QDialogButtonBox; buttonBox->addButton(startButton, QDialogButtonBox::ActionRole); buttonBox->addButton(openButton, QDialogButtonBox::ActionRole); buttonBox->addButton(quitButton, QDialogButtonBox::RejectRole); connect(startButton, SIGNAL(clicked()), this, SLOT(start())); connect(quitButton, SIGNAL(clicked()), this, SLOT(close())); connect(openButton, SIGNAL(clicked()), this, SLOT(openFile())); connect(&tcpClient, SIGNAL(connected()), this, SLOT(startTransfer())); connect(&tcpClient, SIGNAL(bytesWritten(qint64)), this, SLOT(updateClientProgress(qint64)));