




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、摘要随着网络技术的飞速发展,计算机给人类文明带来了翻天覆地的变化,原来物理上 的接 口 已不 能 满足 网络通 信 的要 求 了。 TCP/IP ( Transmission Control Protocol/Internet Protocol )协议作为网络通信的基本协议就解决了这一通信难题, 它引入了一种称之为“ Socket ”的应用程序接口。 Socket 是建立在传输层协议上的一 种套接字规范,基于 Socket 的网络编程已是一项现如今被广泛利用的技术,很大程度 上方便了人们的生活。本文以 VC+6.0 为开发环境,利用套接字的网络编程规范,实现运行不同桌面操 作系统的计算机之间的
2、相互监控的远程控制系统。该系统对远程主机的监控主要包括: 实时监视桌面状态、修改系统配置文件、控制鼠标、键盘等基本操作。系统可以让本地 计算机通过局域网访问不同的远程计算机,也可以进行网际主机控制。本文首先针对远程控制系统的关键技术进行了深入研究, 并对远程控制系统的做出 了需求分析。设计了系统的基本框架和各个模块的功能,主要针对服务器模块,客户端 模块,消息模拟模块等进行了具体实现。最后对系统进行了功能测试和性能分析,并得 出所期望的测试结果。关键字: Socket ;VC+ ;网络编程;远程控制AbstractWith the rapid development of network te
3、chnology, computer has brought human civilization aundergone enormous changes, the original physical interface has been unable to meet the requirements of network communication.As the network communication protocol TCP / IP protocolsolved the basic problem of this communication, the introduction of
4、a technique called Socket application program interface. Socket network based on programming is a widely utilized nowadays .In this paper, VC 6.0 development environment, socket-based network programming, implementation and process control system that allows the local computer through the LAN to acc
5、ess different remote computers, and its operation can also be carried out Internet host.This article first briefly introduces the remote desktop monitoring system key technologies, as well as system requirements analysis. The basic framework of the system design and function of each module; then int
6、roduces the various functional modules of the specific implementation steps. Finally, test methods and results, the advantages and disadvantages of the system are summarized.Keywords :Socket ;VC+ ; Network Programming;Remote Control目录1 绪论 11.1 课题的背景和意义 11.2 课题的国内外研究现状 11.3 课题的结构安排 22 Socket 网络编程的关键技
7、术 32.1 Socket 网络编程理论基础 32.1.1 OSI 七层网络模型与TCP/IP 四层网络模型 32.1.2 Socket 编程基本原理 72.2 Windows Socket 网络编程技术 112.2.1 Winsock 简介 112.2.2 Winsock 通信机制 112.2.3 Winsock 编程模型 122.3 图像技术 152.4 图像压缩编码解码 172.4.1 霍夫曼压缩 182.4.2 Run Length 压缩 183 远程控制系统总体设计 213.1 系统需求分析 213.1.1 用户需求 213.1.2 可采用的技术方案 213.2 可行性技术方案 22
8、3.2.1 技术可行性 223.2.2 经济可行性 223.3 系统的基本框架 223.4 模块划分及功能设计 244 系统的详细设计与实现 254.1 界面设计 254.1.1 客户端界面 254.1.2 服务器端界面 284.2 客户端模块设计与实现 294.3 服务器模块设计与实现 304.4 消息模拟功能的实现 324.5 流数据的实现 334.6 图形编码 345 系统实施及测试 385.1 测试环境搭建 385.2 系统功能和性能测试 385.2.1 客户端显示测试 385.2.2 鼠标键盘功能测试 445.3 测试结果 47结 论 48致 谢 49参考文献 50附录 A 英文原文
9、 52附录 B 中文翻译 65附录 C 源程序 721 绪论1.1 课题的背景和意义随着计算机网络技术的发展,原来物理上的接口(如键盘、鼠标、网卡、显示卡等 输入、输出接口)已不能满足网络通信的要求了。 TCP/IP 协议作为网络通信的基本协 议就解决了这一通信难题。 TCP/IP 协议集成到操作系统的内核中,在 TCP/IP 协议中 引入了一种称之为“ Socket ”的应用程序接口。 Socket 是建立在传输层协议是 TCP (Transmission Control Protocol)和 UDP ( User Datagram Protocol )上的一种套接字规范,它最初由美国加州
10、Berkley 大学提出,是 UNIX 操作系统开发的网络通 信接口,它定义了两台计算机间的通信规范(也是一种编程规范)。如果两台计算机是 利用一个“通道”进行通信,那么这个“通道”的两端就是套接字。 Socket 屏蔽了底 层通信软件和具体操作系统的差异,使得任何两台安装了 TCP 协议软件和实现了 Socket 规范的计算机之间的通信成为可能。 Socket 接口是 TCP/ IP 网络最为通用的 API (Application Program Interface),也是在 Internet 上进行应用开发最通用的API。1.2 课题的国内外研究现状基于 Socket 的网络编程技术在人
11、们不断的研究和探索下,日益的完善与成熟,已 被广泛的应用在通信,医疗等各个领域。比如市面上比较普遍的 QQ 、UC 、飞鸽传书 等以内部网络为中心的资源共享系统,都应用到套接字网络编程技术。目前,常用的 Socket 类型有两种,流式 Socket (SOCK_STREAM )和数据报式 Socket (SOCK_DGRAM )。流式是一种面向连接的 Socket ,针对于面向连接的 TCP 服务应用,实现了无差错无重复的顺序数据传输,无长度限制;数据报式 Socket 是一 种无连接的 Socket ,对应于无连接的 UDP 服务应用, 定义了一种无连接的服务, 数据 通过相互独立的报文进行
12、传输,是无序的,并且不保证可靠。在现在的网络应用中,通 信双方最常见的交互模式便是 Client/ Server 模式。客户 / 服务器模式通常采用监听 / 连接的方式实现,服务器端应用程序在一个端口监听对服务的请求。也就是说,服务 进程一直处于休眠状态,直到有一个客户对这个服务提出了连接请求,此时服务线程被 “唤醒”并为客户。目前,大多数远程进程间通信代码是用 Socket 编写的,实际应用 中用 Socket 传输信息并不是独立的,它在多线程的处理环境中应用更为广。1.3 课题的结构安排第 1 章论述了 Socket 网络编程的的研究背景和意义, Socket 网络编程技术的国 内外研究现
13、状。第 2 章论述了 Socket 网络编程的关键技术:网络编程的理论基础, Windows Socket 网络编程技术,图像技术,图像压缩的编码及解码,包括霍夫曼压缩,和 Run Length (行程长度)压缩等。第 3 章对系统进行了总体设计。总体设计包括需求分析、可行性技术方案,框架结 构、模块划分以及模块的功能定义。第 4 章给出了系统详细的设计和具体实现。 详细设计包括了界面设计, 客户端模块 设计与实现,服务器模块设计与实现,消息模拟功能的实现,流数据的实现,图形编码第 5 章对系统进行了测试,包括测试的环境、过程和测试结论。2 Socket 网络编程的关键技术2.1 Socket
14、 网络编程理论基础2.1.1 OSI 七层网络模型与 TCP/IP 四层网络模型1 、OSI 网络分层参考模型网络协议设计者不应当设计一个单一、 巨大的协议来为所有形式的通信规定完整的 细节,而应把通信问题划分成多个小问题,然后为每一个小问题设计一个单独的协议, 这样做使得每个协议的设计、分析、时限和测试比较容易。协议划分的一个主要原则是 确保目标系统有效且效率高。为了提高效率,每个协议只应该注意没有被其他协议处理 过的那部分通信问题;为了主协议的实现更加有效,协议之间应该能够共享特定的数据 结构,同时这些协议的组合应该能处理所有可能的硬件错误以及其它异常情况。为了保 证这些协议工作的协同性,
15、应当将协议设计和开发成完整的、协作的协议系列(即协议 簇),而不是孤立地开发每个协议。在网络历史的早期, ISO(国际标准化组织) 和国际电报电话咨询委员会 ( CCITT ) 共同出版了开放系统互联的七层参考模型。 计算机操作系统中的网络过程包括从应用请 求(在协议栈的顶部)到网络介质(底部), OSI 参考模型如图 2.1 把功能分成七个分 立的层次。第一层:物理层,负责最后将信息编码成电流脉冲或其它信号以用于网上传输。它 由计算机和网络介质之间的实际界面组成,可定义电气信号、符号、线的状态、时钟要 求、数据编码、数据传输用的连接器。第二层:数据链路层,通过物理网络链路提供可靠的数据传输。
16、不同的数据链路层 定义了不同的网络和协议特征,其中包括物理编址、网络拓扑结构、错误校验、帧序列 以及流控。第三层:网络层,负责在源点和终点之间建立连接。它一般包括网络寻径、流量控 制、错误检查等。相同 MAC (Media Access Control )标准的不同网段之间的数据传 输一般只涉及到数据链路层,而不同的 MAC 标准之间的数据传输都涉及到网络层。例如 IP 路由器工作在网络层,因而可以实现多种网络间的互联。第四层:传输层,向高层提供可靠的端到端的网络数据流服务。传输层的功能一般 包括流控、多路传输、虚电路管理及差错校验和恢复。流控管理设备之间的数据传输, 确保传输设备不发送比接收
17、设备处理能力大的数据; 多路传输使得多个应用程序的数据 可以传输到一个物理链路上;虚电路由传输层建立、维护和终止;差错校验包括为检测 传输错误而建立的各种不同结构;而差错恢复包括所采取的行动(如请求数据重发), 以便解决发生的任何错误。传输控制协议( TCP )是提供可靠数据传输的 TCP/IP 协议 族中的传输层协议。第五层:会话层,建立、管理和终止表示层与实体之间的通信会话。 第六层:表示层,提供多种功能用于应用层数据编码和转化,以确保以一个系统应 用层发送的信息可以被另一个系统应用层识别。 表示层的编码和转化模式包括公用数据 表示格式、性能转化表示格式、公用数据压缩模式和公用数据加密模式
18、。第七层:应用层,最接近终端用户的 OSI 层,这就意味着 OSI 应用层与用户之间 是通过应用软件直接相互作用的。应用层的功能一般包括标识通信伙伴、定义资源的可 用性和同步通信。因为可能丢失通信伙伴,应用层必须为传输数据的应用子程序定义通 信伙伴的标识和可用性。定义资源可用性时,应用层为了请求通信而必须判定是否有足 够的网络资源。在同步通信中,所有应用程序之间的通信都需要应用层的协同操作。图 2.1 七层网络模型2 、TCP/IP 四层网络模型TCP/IP 分层模型(TCP/IP Layening Model )被称作因特网分层模型 (Internet Layering Model )、因特
19、网参考模型( Internet Reference Model )。TCP/IP 协议被组织成四个概念层,其中有三层对应于 ISO 参考模型中的相应层。 ICP/IP 协议族并不包含物理层和数据链路层,因此它不能独立完成整个计算机网络系 统的功能,必须与许多其他的协议协同工作。TCP/IP 分层模型的四个协议层分别完成以下的功能: 第一层:网络接口层,包括用于协作 IP 数据在已有网络介质上传输的协议。实际 上 TCP/IP 标准并不定义与 ISO 数据链路层和物理层相对应的功能。相反,它定义像 地址解析协议( Address Resolution Protocol, ARP )这样的协议,提
20、供 TCP/IP 协 议的数据结构和实际物理硬件之间的接口。第二层:网间层,对应于 OSI 七层参考模型的网络层。本层包含 IP 协议、 RIP 协议(Routing Information Protocol,路由信息协议) ,负责数据的包装、 寻址和路由。同时还包含网间控制报文协议( Internet Control Message Protocol, ICMP)用来提供网络诊断信息。第三层:传输层,对应于 OSI 七层参考模型的传输层,它提供两种端到端的通信 服务。其中 TCP 协议提供可靠的数据流运输服务, UDP 协议提供不可靠的用户数据报 服务。第四层:应用层,对应于 OSI 七层参
21、考模型的应用层和表达层。因特网的应用层 协议包括 Finger 、Whois 、FTP (文件传输协议)、 Gopher 、HTTP (超文本传输协 议)、 Telent (远程终端协议)、 SMTP (简单邮件传送协议)、 IRC (因特网中继会 话)、 NNTP (网络新闻传输协议)等。图 2.2 为 TCP/IP 四层模型。图 2.2 TCP/IP 四层模型2.1.2 Socket 编程基本原理1、套接字介绍套接字( Socket )起初来源于 UNIX ,是加利福尼亚大学 Berkeley 分校开发的 UNIX 操作系统下的网络通信接口。 当 TCP/IP 协议被集成到 UNIX 内核
22、中时, 相当于 在 UNIX 系统引入了一种新型的 I/O 操作,UNIX 用户进程与网络协议的交互作用比用 户进程与传统的 I/O 设备相互作用复杂得多,因此引入了套接字作为通信端口,随着 UNIX 操作系统的广泛使用, Socket 亦当之无愧的成为了最流行的网络通信程序接口 之一。套接字存在于其特定的通信域(即地址族)中,通信域是为了处理一般的线程通过 套接字通信而引进的一种抽象概念,只有隶属于同一地址族的套接字才能建立对话(数 据交换也可能穿越域的界限,但这时一定要执行某种解释程序), Windows Sockets V1.0 目前只支持网际域( AF_INET ),所有使用网际协议簇
23、的进程均适用于该域。一 般情况下除非通信协议支持,只有相同类型的套接字方能相互传递数据, Windows Sockets V1.1 版主要支持两种类型的套接字:流式套接字和数据报套接字,还有一种 是原始套接字,但为保证网络应用程序的兼容性,一般不鼓励使用原始套接字。流式套接字( SOCK_STREAM ):该类套接字提供了面向连接的、可靠的、数据 无错并且无重复的数据发送服务。而且发送的数据是按顺序接收的。所有利用该套接字 进行传递的数据均被视为连续的字节流的并且无长度限制。这对数据的稳定性、正确性 和发送/接收顺序要求严格的应用十分适用, TCP 协议使用该类接口。但其对线路的占 用率相对提
24、高。流式套接字的实现屡见不鲜,如远程登录( TELNET )、文件传输协议 (FTP )等均使用了流式套接字。数据报式套接字( SOCK_DGRAM ):数据报式套接字提供了面向无连接的服务 它独立的数据包形式发送数据( 数据包长度不能大于 32KB ),不提供正确性检查, 也不保证各数据包的发送顺序,因此,可能出现数据的重发、丢失等现象,并且接收顺 序由具体路由决定。 然而,数据报的实现对网络线路占用率较低。 NFS(网络文件系统) 即是采用此类套接字、在 TCP/IP 协议族中, UDP 使用该类接口。原始套接字( SOCK_RAW ):该套接字一般不会出现在高级网络接口的实现中, 因为它
25、是直接针对协议的较低层( 如 IP 、TCP、 UDP 等)直接访问的。常用于检验 新的协议实现或访问现有服务中配置的新设备,如前所述,一般不提倡他的直接应用。2、套接字编程基本概念进程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行, 为保证两个相互通信的进程之间既互不干扰又协调一致工作, 操作系统为进程通信提供 了相应设施,如 UNIX BSD 中的管道( pipe )、命名管道( named pipe )和软中断 信号(signal ),UNIX system V 的消息(message )、共享存储区( shared memory ) 和信号量( semaphore
26、)等,但都仅限于用在本机进程之间通信。网间进程通信要解 决的是不同主机进程间的相互通信问题(可把同机进程通信看作是其中的特例)。为此,首先要解决的是网间进程标识问题。同一主机上,不同进程可用进程号 (process ID )唯一标识。但在网络环境下,各主机独立分配的进程号不能唯一标识该 进程。例如,主机 A 赋于某进程号 5,在B 机中也可以存在 5 号进程,因此, “5 号进 程”这句话就没有意义了。其次,操作系统支持的网络协议众多,不同协议的工作方式 不同,地址格式也不同。因此,网间进程通信还要解决多重协议的识别问题。为了解决上述问题, TCP/IP 协议引出了几个概念。(1)端口 网络中
27、可以被命名和寻址的通信端口,是操作系统可分配的一种资源。按照 OSI 七层协议的描述,传输层与网络层在功能上的最大区别是传输层提供进 程通信能力。从这个意义上讲,网络通信的最终地址就不仅仅是主机地址了,还包括可 以描述进程的某种标识符。为此, TCP/IP 协议提出了协议端口( protocol port ,简称 端口)的概念,用于标识通信的进程。端口是一种抽象的软件结构(包括一些数据结构和 I/O 缓冲区)。应用程序(即进 程)通过系统调用与某端口建立连接( binding )后,传输层传给该端口的数据都被相 应进程所接收,相应进程发给传输层的数据都通过该端口输出。在 TCP/IP 协议的实
28、现 中,端口的操作类似于一般的 I/O 操作,进程获取一个端口,相当于获取本地唯一的 I/O 文件,可以用一般的读写原语访问。类似于文件描述符,每个端口都拥有一个叫端口号( port number )的整数型标识 符,用于区别不同端口。 由于 TCP/IP 传输层的两个协议 TCP 和 UDP 是完全独立的两 个软件模块,因此各自的端口号也相互独立, 如 TCP 有一个 255 号端口,UDP 也可以 有一个 255 号端口,二者并不冲突。端口号的分配是一个重要问题。有两种基本分配方式:第一种叫全局分配,这是一 种集中控制方式,由一个公认的中央机构根据用户需要进行统一分配,并将结果公布于 众。
29、第二种是本地分配,又称动态连接,即进程需要访问传输层服务时,向本地操作系 统提出申请,操作系统返回一个本地唯一的端口号,进程再通过合适的系统调用将自己 与该端口号联系起来 (绑扎) 。TCP/IP 端口号的分配中综合了上述两种方式。 TCP/IP 将端口号分为两部分,少量的作为保留端口,以全局方式分配给服务进程。因此,每一 个标准服务器都拥有一个全局公认的端口(即周知口, well-known port ),即使在不 同的机器上,其端口号也相同。 剩余的为自由端口, 以本地方式进行分配。 TCP 和 UDP 均规定,小于 256 的端口号才能作保留端口。(2)地址 网络通信中通信的两个进程分别
30、运行在不同的机器上。在互连网络中,两台机器可 能位于不同的网络,这些网络通过网络互连设备(网关,网桥,路由器等)连接。因此 需要三级寻址:a. 某一主机可与多个网络相连,必须指定一特定网络地址;b. 网络上每一台主机应有其唯一的地址;c. 每一主机上的每一进程应有在该主机上的唯一标识符。通常主机地址由网络 ID 和主机 ID 组成,在 TCP/IP 协议中用 32 位整数值表示; TCP 和 UDP 均使用 16 位端口号标识用户进程。(3)网络字节顺序 不同的计算机存放多字节值的顺序不同,有的机器在起始地址存放低位字节(低价 先存),有的存高位字节(高价先存)。为保证数据的正确性,在网络协议
31、中须指定网 络字节顺序。 TCP/IP 协议使用 16 位整数和 32 位整数的高价先存格式, 它们均含在协 议头文件中。(4)连接 两个进程间的通信链路称为连接。连接在网络中表现为一些缓冲区和一组协议机 制,在外部表现出比无连接高的可靠性。(5)半相关综上所述, 网络中用一个三元组可以在全局唯一标志一个进程: (协议,本地地址, 本地端口号)这样一个三元组, 叫做一个半相关 (half-association ),它指定连接的每半部分。(6)全相关 一个完整的网间进程通信需要由两个进程组成,并且只能使用同一种高层协议。也 就是说, 不可能通信的一端用 TCP 协议,而另一端用 UDP 协议。
32、因此一个完整的网间 通信需要一个五元组来标识: (协议, 本地地址,本地端口号,远地地址, 远地端口号) 这样一个五元组,叫做一个相关( association ),即两个协议相同的半相关才能 组合成一个合适的相关,或完全指定组成一连接。(7)顺序 在网络传输中,两个连续报文在端端通信中可能经过不同路径,这样到达目的地 时的顺序可能会与发送时不同。“顺序”是指接收数据顺序与发送数据顺序相同。 TCP 协议提供这项服务。(8)流控制在数据传输过程中控制数据传输速率的一种机制, 以保证数据不被丢失。 TCP 协议 提供这项服务。2 、服务方式 在网络分层结构中,各层之间是严格单向依赖的,各层次的分
33、工和协作集中体现在 相邻层之间的界面上。“服务”是描述相量相邻层之间关系的抽象概念,即网络中各层 向紧邻上层提供的一组操作。下层是服务提供者,上层是请求服务的用户。服务的表现 形式是原语( primitive ),如系统调用或库函数。系统调用是操作系统内核向网络应 用程序或高层协议提供的服务原语。网络中的 n 层总要向 n+1 层提供比 n-1 层更完备 的服务,否则 n 层就没有存在的价值。在 OSI 的术语中,网络层及其以下各层又称为通信子网,只提供点到点通信,没 有程序或进程的概念。而传输层实现的是“端到端”通信,引进网间进程通信概念,同 时也要解决差错控制,流量控制,数据排序(报文排序
34、),连接管理等问题,为此提供 不同的服务方式:面向连接(虚电路)或无连接 面向连接服务是电话系统服务模式的抽象, 即每一次完整的数据传输都要经过建立 连接,使用连接,终止连接的过程。在数据传输过程中,各数据分组不携带目的地址, 而使用连接号( connect ID )。本质上,连接是一个管道,收发数据不但顺序一致,而 且内容相同。 TCP 协议提供面向连接的虚电路。无连接服务是邮政系统服务的抽象,每个分组都携带完整的目的地址,各分组在系 统中独立传送。无连接服务不能保证分组的先后顺序,不进行分组出错的恢复与重传, 不保证传输的可靠性。 UDP 协议提供无连接的数据报服务。2.2 Windows
35、 Socket 网络编程技术2.2.1 Winsock 简介为了方便网络编程, Microsoft 联合了其他几家公司共同制定了一套 Windows 下 的网络编程接口, 即 Windows Sockets 规范,它不是一种网络协议, 而是一套开放的、 支持多种协议的 Windows 下的网络编程接口。现在的 Winsock 已经基本上实现了与 协议无关,你可以使用 Winsock 来调用多种协议的功能,但较常使用的是 TCP/IP 协 议。 Socket 实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有 Socket 接口的计算机通信。应用程序在网络上传输和接收的信息都通过这
36、个 Socket 接口来实现。Winsock 规范定义了一套可使网络程序开发人员在 Windows 下开发标准的 TCP/IP 网络程序接口,它不仅包含人们所熟悉的 Berkeley Socket 风格的库函数,还 包含了一组针对 Windows 的扩展库函数,以使程序员能充分地利用 Windows 消息驱 动机制、异步网络事件选择方式进行编程。 Winsock 规范定义并记录了任何使用 API 与 Internet 通讯协议( ISP 通常指 TCP/IP )连接。应用程序使用 Windows Sockets 的 API ,而 Windows Sockets 又利用下层的网络通信协议与操作系
37、统以产生实际的通 信。2.2.2 Winsock 通信机制应用程序的网络通信归根结底是利用相同的通信协议来完成信息的传输, 应用程序 和 Winsock 都工作在 Windows 的用户模式下,操作系统仅仅通过 Winsock 是不能完 成网络间的通信,还需要底层的支持,而套接字仿真器(套接字核心模式驱动程序)和 传输驱动程序接口( Transport Driver Interface ,TDI )是负责操作系统核心态环境 下的网络通信,起到了 Winsock 和传输协议之间的通信桥梁作用。如图 2.2 所示, Winsock 是网络通信应用程序于套接字仿真器间的接口, TDI 是套接字仿真器
38、和传输 协议间的接口套接字核心模式,驱动程序复杂连接和缓冲区管理,以便向应用程序提供 套接字仿真(在 AFDSYS 文件中实现),同时负责与底层传输驱动程序对话传输驱动 程序接口( TDI )负责核心模式驱动程序与传输协议间的通信。当应用程序利用 Winsock 发送和接收数据时, 并不是由 Winsock 从网络上发送和 接收数据的,而是由核心模式驱动程序 AFDSYS 负责管理发送和接收缓冲区来发送和 接收数据。也就是说,当应用程序调用 send 或 WSASend 函数来发送数据时, AFDSYS 将把数据复制进他自己的发送缓冲区, 然后 send 后 WSASend 函数立即返回 AF
39、DSYS 在后台负责把数据发送出去, 远程客户端接收数据的情况也类似, 由接收方的 AFDSYS 在后台负责把数据复制到自己的接收缓冲区,然后当应用程序调用 recv 后 WSARecv 函数来接收数据时,把数据由 AFDSYS 管理的接收缓冲区复制到应用程序提供的缓冲 区中。 AFDSYS 管理的发送缓冲区 SO-SNDBUF 和接收缓冲区 SO-RCVBUF 在缺省 时两个缓冲区的大小都为 8192 个字节,但可以根据实际要求由应用程序设定,由于我 们传输的对象可能是大数据量文件, 因此需要对系统的发送缓冲区和接收缓冲区作相应 的设定,以保障大数据量的文件数据的发送和接收。Sockets
40、的实质是通信端点的一种抽象,它提供一种发送和接受数据的机制。 根据 通信性质不同可分为: Stream Sockets (流式套接字)和 Datagram Sockets (数据 报套接字),其中 Stream Sockets 提供无差错的、面向连接的、无长度限制的双向字 节流传输,适应于处理大量数据,尤其适合于 FTP 服务。应用程序套接字套接字仿真器传输驱动程序接口传输协议图 2.2 套接字通信机制2.2.3 Winsock 编程模型1 、建立一个 SocketWinsock 函数含有三个参数,“协议簇”参数指明像 TCP/IP 协议组这样的一组 相关协议,“ Socket 类型”参数指明
41、参数指明程序是进行数据报传输还是字节流传输,协议”参数定义了协议簇内程序欲使用的具体协议(如TCP 或 UDP )由于编程时必须指定程序使用的协议簇, 因而能够为使用不同协议组和地址格式的 网络建立相同的接口。也就是说,本函数的正确调用可使 Winsock 接口运行在多个网 络上。下面语句显示了一个典型的具体 Winsock 函数调用:Socket_handle=Socket (PF_INET ,SOCK_STREAM ,IPPROTO_TCP ); 这个 Winsock 使用 Internet 协议簇( PF_INET )的 TCP 协议(IPPROTO_TCP ) 进行字节流( SOCK_
42、STREAM )通信。当程序调用 Winsock 函数建立一个新 Socket 时, Winsock 将为一个内部数据结构分配内存,此结构中保存有关此 Socket 的信息。 2 、配置一个 Socket程序可使用 Winsock 中不同的函数来配置一个 Socket 。每个 Socket 需要五种信 息:本地和远地本机的 IP 地址、本地和远地进程的协议端口、连接使用的协议。面向连接的协议在连接端点之间建立一条虚电路, 面向连接的客户程序不必关心网 络软件使用怎样的本地地址传输数据。建立好连接后,客户程序依靠TCP 协议给它传送数据。因此面向连接的客户程序不需指明本地协议端口,它提供给Soc
43、ket 的唯一地址信息是远地服务器信息( IP 地址和协议端口)。 Winsock 自动保存本地 IP 地址和选 择本地协议端口, 并确保客户程序收到传输层送给本地协议端口的所有数据。 也就是说, Winsock 为程序选择协议端口, 当数据到达此端口时通知程序, 程序不必关心 Winsock 使用哪一个协议端口。在前一步已建立的 Socket 基础上,面向连接的客户程序使用 connect 函数来配置 Socket 。result=connect (“ Socket 句柄”,“远地 Socket 地址”,“远地 Socket 地址 长度”);此时,内部数据结构就包含了网络通信必须的五种信息。
44、只有面向连接的客户进程 才启动与远地服务器 Socket 的直接连接。无连接协议不建立与远地服务器的直接连接。 使用无连接协议的客户程序必须发送 一个带有服务请求的数据报并等待应答,远地服务器的应答以数据报的形式到达。 Winsock 用 bind 函数给 Socket 指定一个本地 IP 地址和一个协议端口,其典型调用 如下:result=bind (“ Socket 句柄”,“本地 Socket 地址”,“本地 Socket 地址长 度”);服务器程序使用 bind 函数用 Winsock 登记一个协议端口, 程序告诉 Winsock 监 视哪一个协议端口的数据传送, Winsock 接着
45、告诉传输层将此协议端口收到的数据传 送给 Winsock 。3 、使用 Socket使用 Socket 之前必须调用 WSAStartup 函数。该函数的第一个参数指明程序请 求使用的 Socket 版本,其中高位字节指明副版本、低位字节指明主版本;操作系统利 用第二个参数返回请求的 Socket 的版本信息。当一个应用程序调用 WSAStartup 函 数时,操作系统根据请求的 Socket 版本来搜索相应的 Socket 库,然后绑定找到的 Socket 库到该应用程序中。以后应用程序就可以调用所请求的 Socket 库中的其它 Socket 函数了。该函数执行成功后返回 0 。应用程序在
46、完成对请求的 Socket 库的使用后,要调用 WSACleanup 函数来解除 与 Socket 库的绑定并且释放 Socket 库所占用的系统资源。Closesocket 函数用来关闭一个描述符为 s 套接字。由于每个进程中都有一个套接 字描述符表, 表中的每个套接字描述符都对应了一个位于操作系统缓冲区中的套接字数 据结构,因此有可能有几个套接字描述符指向同一个套接字数据结构。套接字数据结构 中专门有一个字段存放该结构的被引用次数,即有多少个套接字描述符指向该结构。当 调用 closesocket 函数时,操作系统先检查套接字数据结构中的该字段的值, 如果为 1 , 就表明只有一个套接字描
47、述符指向它, 因此操作系统就先把 s 在套接字描述符表中对应 的那条表项清除,并且释放 s 对应的套接字数据结构;如果该字段大于 1,那么操作系 统仅仅清除 s 在套接字描述符表中的对应表项, 并且把 s 对应的套接字数据结构的引用 次数减 1 。Closesocket 函数如果执行成功就返回 0 ,否则返回 SOCKET_ERROR 。 服务程序可以调用 listen 函数使其流套接字 s 处于监听状态。 处于监听状态的流套 接字 s 将维护一个客户连接请求队列, 该队列最多容纳 backlog 个客户连接请求。 假如 该函数执行成功,则返回 0;如果执行失败,则返回 SOCKET_ERRO
48、R 。服务程序调用 accept 函数从处于监听状态的流套接字 s 的客户连接请求队列中取 出排在最前的一个客户请求,并且创建一个新的套接字来与客户套接字创建连接通道, 如果连接成功,就返回新创建的套接字的描述符,以后与客户套接字交换数据的是新创 建的套接字; 如果失败就返回 INVALID_SOCKET 。该函数的第一个参数指定处于监听 状态的流套接字;操作系统利用第二个参数来返回新创建的套接字的地址结构;操作系统利用第三个参数来返回新创建的套接字的地址结构的长度2.3 图像技术Windows 系统不允许应用程序直接访问视频存储区, 而是提供了一个抽象的接口, 称作图形设备接口( GDI )
49、。 Windows 已经提供了各种显示卡的驱动程序,这样我们 的程序就不用关心与系统相连的显示卡的类型,可以通过调用 GDI 函数来和硬件打交 道。各种 GDI 函数会自动参考被称为设备环境的数据结构。 Windows 会自动将设备环 境结构映射到相应的物理设备, 并且提供正确的输入输出指令, GDI 在处理速度上几乎 和直接进行视频访问一样快。 BMP 图形文件是 Windows 采用的图形文件格式,在 Windows 环境下运行的所有图像处理软件都支持 BMP 图像文件格式。 Windows 系统 内部各图像绘制操作都是以 BMP 为基础的。 Windows3.0 以前的 BMP 图文件格
50、式与 显示设备有关,因此把这种 BMP 图像文件格式称为设备相关位图( DDB )格式。 Windows 3.0 以后的 BMP 图像文件与显示设备无关, 因此把这种 BMP 图像文件格式 称为设备无关位图( DIB )格式。位图文件可看成由 4 个部分组成;位图文件头 (bitmap-fileheader )、位图信息头(bitmap-information header)、彩色表(colortable )和定义位图的字节阵列。(1)BMP 文件头BMP 文件头数据结构含有 BMP 文件的类型、文件大小和位图起始位置等信息。 其结构定义如下:typedefstruct tagBITMAPFI
51、LEHEADERWORD bfrype ;位图文件的类型,必须为 BMDWORD bfSize ;位图文件的大小,以字节为单位WORD bIRescrvcdl ;图文件保留字,必须为 0WORD bIReserved2 ;位图文件保留字,必须为 0DWORD bfOffBits ;位图数据的起始位置, 以相对于位图文件头的偏移量表示, 单位是字节BITMAPFILEHEADER ;(2)BMP 位图信息头BMP 位图信息头数据用于说明位图的尺寸等信息,其结构定义如下:typedefstruct tagBITMAPINFOHEADERDWORD biSize ;结构所占用字节数LONG biWi
52、dth ;位图的宽度,以像素为单位 LONG biHeight ; 位图的高度,以像素为单位WORD biplanes ; 目标设备的级别,必须为 lWORD biBitCount ;每个像素所需的位数,必须是 l(双色), 4(16 色),8256 色)或 24 (真彩色)之一DWORD biCompression; 位图压缩类型,必须是 0(不压缩) ,1( BI_RLE8压缩类型)或 2(BI RLE4 压缩类型)之一DWORD biSizeImage ;位图的大小,以字节为单位LONG biXPelsPerMeter;位图水平分辨率。每米像素数LONG biYPelsPerMeter;
53、位图垂直分辨率,每米像素数DWORD biClrUsed ;DWORD biClrImportant位图实际使用的颜色表中的颜色数; 位图显示过程中重要的颜色数BITMAPINFOHEADER(3)调色板(颜色表)调色板用于说明位图中的颜色,它有若干个表项,每一个表项是一个 RGBQUAD类型的结构,定义一种颜色。ROBQUAD 结构的定义如下:typedefstruct tagRGBQUADBYTE rgbBlue ; 蓝色的亮度(值范围为 0255 )BYTE gbGreen ; 绿色的亮度(值范围为 0255 )BYTE rgbRed ;红色的亮度(值范围为 0255 )BYTE rgb
54、Reserved ;保留,必须为 0RGBQUAD ;颜色表中 RGBQUAD 结构数据的个数由 biBitCount 来确定: 当 biBitCount=1 ,4,8 时,分别有 2,16,256 个表项; 当 biBitCount=24 时,没有颜色表项。位图信息头和颜色表组成位图信息, B1TMAPINFO 结构定义如下:typcdefstruct tagBITMAPINFO位图信息头BITMAPINFoHEADER bmiI-IeaderRGBQUAD bmiColors ; 颜色表BITMAPINFO ;(4)位图数据 位图数据记录了位图的每一个像素值,记录顺序是扫描行内从左到右,扫
55、描行之问 从下到上。位图的一个像素值所占的字节数:当 biBitCount=1 时, 8 个像素占 1 个字节;当 biBitCount=4 时, 2 个像素占 1 个字节;当 biBitCount=8 时, 1 个像素占 1 个字节;当 biBitCount=24 时, 1个像素占 3 个字节。Windows 规定下个扫描行所占的字节数必须是 4 的倍数(即以 long 为单位), 不足的以 0 填充。一个扫描行所占的字节数计算方法:DataSizePerLin= (biWidth*biBitCount+31 )8;一个扫描行所占的字节数DataSizePcrLincr=DataSizePe
56、rLine 4*4 ;字节数必须是 4 的倍数位图数据的大小(不压缩情况下)DataSize=DataSizePerLine*biHeight ;2.4 图像压缩编码解码位图原稿数字化后的数据量非常惊人,在硬盘上存储时颇占地盘,并给传输带来了 很多不便,所以图像压缩得到了广泛的运用。压缩的目的就是满足存储容量和传输带宽 的要求,而付出的代价是大量的计算。图像数据压缩技术总的来说就是利用图像数据固 有的冗余性和相干性,将一个大的数据文件转换成较小的同性质的文件。图像压缩主要根据两个基本事实来实现。一是图像数据中有许多重复的数据,使用 数学方法来表示这些重复数据就可以减少数据量; 二是人的眼睛对图
57、像细节和颜色的辨 认有一个极限,把超过极限的部分去掉,也就达到了压缩数据的目的。利用前一个事实 的压缩技术就是无损压缩技术,即压缩后的图像数据还原后与未压缩时严格相同,没有 失真,如 TIFF 图像文件格式;利用后一个事实的压缩技术就是有损压缩技术,即压缩 后的图像数据与未压缩时有所不同,但不影晌人们对原始资料表达的信息造成误解,如 JPEG 图像文件格式。 实际的图像压缩其实是综合使用各种有损和无损压缩技术来实现采取有损压缩的方法进行数据压缩,在解压时会造成较大的误差扩。所以本系统采 用的数据压缩方式是无损压缩。图像压缩编码对图像采用不同的表达方式以减小表示图像所需的数据量, 所以也常 称为数据压缩。压缩的理论基础是信息论。从信息论的角度来看,压缩就是去掉信息中 的冗余,即保留不确定的信息,去掉确定的信息(可推知的),也就是用一种更接近信 息本质的描述来代替原有冗余的描述。这个本质的因素就是信息量(即不确定因素)。假如用 n1和 n 2分别代表用来表达相同信息的 2个数据集合中的信息载体单位的个 数,那么压缩率 CR 为:Cr=n l/n 2 ,一般情况下 Cr 在开区间( 0 ,+)中取值。在数 字图像压缩中,有 3 种基本的数据冗余:像素相关冗余,编码冗余,心理视觉冗余。如 果能减少或消除其中的一种或多种冗余,就能取得数据压缩
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园防雷安全知识培训课件
- 校园防侵害安全知识培训课件
- 北大荒专业知识培训课件
- 散打理论考试试题及答案
- 残疾汽车考试题及答案
- 农行银行面试题及答案
- 动物防疫考试题及答案
- 企业形象设计试题及答案
- 煤矿顶板考试题及答案
- 有机2考试题及答案
- 国家基层糖尿病防治管理指南(2022)更新要点解读-1074177503
- 区域新能源集控中心建设方案
- 电气控制与plc实训教程PPT完整全套教学课件
- 2023年医药卫生技能鉴定考试-角膜接触镜验配员考试参考题库(含答案)
- RB/T 089-2022绿色供应链管理体系要求及使用指南
- 对外经济贸易大学金融学院投资学专业人才培养方案
- 肿瘤患者食欲症状问卷
- 高考语文专题复习:小说阅读特殊“异常视角”知识-儿童视角、女性视角、动物视角
- SC/T 3305-2003烤虾
- GB/Z 18462-2001激光加工机械金属切割的性能规范与标准检查程序
- GB/T 10051.3-2010起重吊钩第3部分:锻造吊钩使用检查
评论
0/150
提交评论