基于Socket的网络编程技术及其实现学士学位论文

上传人:无*** 文档编号:79207286 上传时间:2022-04-23 格式:DOC 页数:70 大小:1.83MB
收藏 版权申诉 举报 下载
基于Socket的网络编程技术及其实现学士学位论文_第1页
第1页 / 共70页
基于Socket的网络编程技术及其实现学士学位论文_第2页
第2页 / 共70页
基于Socket的网络编程技术及其实现学士学位论文_第3页
第3页 / 共70页
资源描述:

《基于Socket的网络编程技术及其实现学士学位论文》由会员分享,可在线阅读,更多相关《基于Socket的网络编程技术及其实现学士学位论文(70页珍藏版)》请在装配图网上搜索。

1、理工大学学士学位论文摘 要随着网络技术的飞速发展,计算机给人类文明带来了翻天覆地的变化,原来物理上的接口已不能满足网络通信的要求了。TCP/IP(Transmission Control Protocol/Internet Protocol)协议作为网络通信的基本协议就解决了这一通信难题,它引入了一种称之为“Socket”的应用程序接口。Socket 是建立在传输层协议上的一种套接字规范,基于Socket的网络编程已是一项现如今被广泛利用的技术,很大程度上方便了人们的生活。本文以VC+6.0为开发环境,利用套接字的网络编程规范,实现运行不同桌面操作系统的计算机之间的相互监控的远程控制系统。该系

2、统对远程主机的监控主要包括:实时监视桌面状态、修改系统配置文件、控制鼠标、键盘等基本操作。系统可以让本地计算机通过局域网访问不同的远程计算机,也可以进行网际主机控制。本文首先针对远程控制系统的关键技术进行了深入研究,并对远程控制系统的做出了需求分析。设计了系统的基本框架和各个模块的功能,主要针对服务器模块,客户端模块,消息模拟模块等进行了具体实现。最后对系统进行了功能测试和性能分析,并得出所期望的测试结果。关键字:Socket;VC+;网络编程;远程控制 AbstractWith the rapid development of network technology, computer has

3、 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 protocol solved the basic problem of this communication, the introduction of a technique called S

4、ocket 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 access different remote

5、 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 introduces the various

6、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网络编程的关键技术32.1 Socket网络编程理论基础32.1.1 OS

7、I七层网络模型与TCP/IP四层网络模型32.1.2 Socket编程基本原理62.2 Windows Socket网络编程技术102.2.1 Winsock简介102.2.2 Winsock通信机制102.2.3 Winsock编程模型112.3 图像技术132.4 图像压缩编码解码162.4.1 霍夫曼压缩172.4.2 Run Length压缩173 远程控制系统总体设计193.1 系统需求分析193.1.1 用户需求193.1.2 可采用的技术方案193.2 可行性技术方案193.2.1 技术可行性193.2.2 经济可行性203.3 系统的基本框架203.4 模块划分及功能设计214

8、 系统的详细设计与实现224.1 界面设计224.1.1 客户端界面224.1.2 服务器端界面244.2 客户端模块设计与实现254.3 服务器模块设计与实现274.4 消息模拟功能的实现294.5 流数据的实现304.6 图形编码305 系统实施及测试345.1 测试环境搭建345.2 系统功能和性能测试345.2.1 客户端显示测试345.2.2 鼠标键盘功能测试395.3 测试结果42结 论43致 谢44参考文献45附录A 英文原文47附录B 中文翻译58附录C 源程序65661 绪论1.1 课题的背景和意义随着计算机网络技术的发展,原来物理上的接口(如键盘、鼠标、网卡、显示卡等输入、

9、输出接口)已不能满足网络通信的要求了。TCP/IP协议作为网络通信的基本协议就解决了这一通信难题。TCP/IP协议集成到操作系统的内核中,在TCP/IP协议中引入了一种称之为“Socket”的应用程序接口。Socket 是建立在传输层协议是TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)上的一种套接字规范,它最初由美国加州Berkley大学提出,是UNIX 操作系统开发的网络通信接口,它定义了两台计算机间的通信规范(也是一种编程规范)。如果两台计算机是利用一个“通道”进行通信,那么这个“通道”的两端就是套接字。Sock

10、et 屏蔽了底层通信软件和具体操作系统的差异,使得任何两台安装了TCP 协议软件和实现了Socket 规范的计算机之间的通信成为可能。Socket接口是TCP/ IP 网络最为通用的API(Application Program Interface),也是在Internet 上进行应用开发最通用的API。1.2 课题的国内外研究现状基于Socket的网络编程技术在人们不断的研究和探索下,日益的完善与成熟,已被广泛的应用在通信,医疗等各个领域。比如市面上比较普遍的QQ、UC、飞鸽传书等以内部网络为中心的资源共享系统,都应用到套接字网络编程技术。目前,常用的Socket类型有两种,流式Socket

11、(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用,实现了无差错无重复的顺序数据传输,无长度限制;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用,定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠。在现在的网络应用中,通信双方最常见的交互模式便是Client/ Server 模式。客户/ 服务器模式通常采用监听/ 连接的方式实现,服务器端应用程序在一个端口监听对服务的请求。也就是说,服务进程一直处于休眠状态,直到有一个客户对这个服务提出了连接请求,

12、此时服务线程被“唤醒”并为客户。目前,大多数远程进程间通信代码是用Socket 编写的,实际应用中用Socket 传输信息并不是独立的,它在多线程的处理环境中应用更为广。1.3 课题的结构安排第1章论述了Socket网络编程的的研究背景和意义, Socket网络编程技术的国内外研究现状。第2章论述了Socket网络编程的关键技术:网络编程的理论基础,Windows Socket网络编程技术,图像技术,图像压缩的编码及解码,包括霍夫曼压缩,和Run Length(行程长度)压缩等。 第3章对系统进行了总体设计。总体设计包括需求分析、可行性技术方案,框架结构、模块划分以及模块的功能定义。第4章给出

13、了系统详细的设计和具体实现。详细设计包括了界面设计,客户端模块设计与实现,服务器模块设计与实现,消息模拟功能的实现,流数据的实现,图形编码等。第5章对系统进行了测试,包括测试的环境、过程和测试结论。2 Socket网络编程的关键技术2.1 Socket网络编程理论基础2.1.1 OSI七层网络模型与TCP/IP四层网络模型1、OSI网络分层参考模型网络协议设计者不应当设计一个单一、巨大的协议来为所有形式的通信规定完整的细节,而应把通信问题划分成多个小问题,然后为每一个小问题设计一个单独的协议,这样做使得每个协议的设计、分析、时限和测试比较容易。协议划分的一个主要原则是确保目标系统有效且效率高。

14、为了提高效率,每个协议只应该注意没有被其他协议处理过的那部分通信问题;为了主协议的实现更加有效,协议之间应该能够共享特定的数据结构,同时这些协议的组合应该能处理所有可能的硬件错误以及其它异常情况。为了保证这些协议工作的协同性,应当将协议设计和开发成完整的、协作的协议系列(即协议簇),而不是孤立地开发每个协议。在网络历史的早期,ISO(国际标准化组织)和国际电报电话咨询委员会(CCITT)共同出版了开放系统互联的七层参考模型。计算机操作系统中的网络过程包括从应用请求(在协议栈的顶部)到网络介质(底部),OSI参考模型如图2.1把功能分成七个分立的层次。第一层:物理层,负责最后将信息编码成电流脉冲

15、或其它信号以用于网上传输。它由计算机和网络介质之间的实际界面组成,可定义电气信号、符号、线的状态、时钟要求、数据编码、数据传输用的连接器。第二层:数据链路层,通过物理网络链路提供可靠的数据传输。不同的数据链路层定义了不同的网络和协议特征,其中包括物理编址、网络拓扑结构、错误校验、帧序列以及流控。第三层:网络层,负责在源点和终点之间建立连接。它一般包括网络寻径、流量控制、错误检查等。相同MAC(Media Access Control)标准的不同网段之间的数据传输一般只涉及到数据链路层,而不同的MAC标准之间的数据传输都涉及到网络层。例如IP路由器工作在网络层,因而可以实现多种网络间的互联。第四

16、层:传输层,向高层提供可靠的端到端的网络数据流服务。传输层的功能一般包括流控、多路传输、虚电路管理及差错校验和恢复。流控管理设备之间的数据传输,确保传输设备不发送比接收设备处理能力大的数据;多路传输使得多个应用程序的数据可以传输到一个物理链路上;虚电路由传输层建立、维护和终止;差错校验包括为检测传输错误而建立的各种不同结构;而差错恢复包括所采取的行动(如请求数据重发),以便解决发生的任何错误。传输控制协议(TCP)是提供可靠数据传输的TCP/IP协议族中的传输层协议。第五层:会话层,建立、管理和终止表示层与实体之间的通信会话。第六层:表示层,提供多种功能用于应用层数据编码和转化,以确保以一个系

17、统应用层发送的信息可以被另一个系统应用层识别。表示层的编码和转化模式包括公用数据表示格式、性能转化表示格式、公用数据压缩模式和公用数据加密模式。第七层:应用层,最接近终端用户的OSI层,这就意味着OSI应用层与用户之间是通过应用软件直接相互作用的。应用层的功能一般包括标识通信伙伴、定义资源的可用性和同步通信。因为可能丢失通信伙伴,应用层必须为传输数据的应用子程序定义通信伙伴的标识和可用性。定义资源可用性时,应用层为了请求通信而必须判定是否有足够的网络资源。在同步通信中,所有应用程序之间的通信都需要应用层的协同操作。 应用层表示层会话层传输层网络层数据链路层物理层图2.1 七层网络模型2、TCP

18、/IP四层网络模型TCP/IP分层模型(TCP/IP Layening Model)被称作因特网分层模型(Internet Layering Model)、因特网参考模型(Internet Reference Model)。TCP/IP协议被组织成四个概念层,其中有三层对应于ISO参考模型中的相应层。ICP/IP协议族并不包含物理层和数据链路层,因此它不能独立完成整个计算机网络系统的功能,必须与许多其他的协议协同工作。TCP/IP分层模型的四个协议层分别完成以下的功能:第一层:网络接口层,包括用于协作IP数据在已有网络介质上传输的协议。实际上TCP/IP标准并不定义与ISO数据链路层和物理层相

19、对应的功能。相反,它定义像地址解析协议(Address Resolution Protocol, ARP)这样的协议,提供TCP/IP协议的数据结构和实际物理硬件之间的接口。第二层:网间层,对应于OSI七层参考模型的网络层。本层包含IP协议、RIP协议(Routing Information Protocol,路由信息协议),负责数据的包装、寻址和路由。同时还包含网间控制报文协议(Internet Control Message Protocol, ICMP)用来提供网络诊断信息。第三层:传输层,对应于OSI七层参考模型的传输层,它提供两种端到端的通信服务。其中TCP协议提供可靠的数据流运输服

20、务,UDP协议提供不可靠的用户数据报服务。第四层:应用层,对应于OSI七层参考模型的应用层和表达层。因特网的应用层协议包括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

21、内核中时,相当于在UNIX系统引入了一种新型的I/O操作,UNIX用户进程与网络协议的交互作用比用户进程与传统的I/O设备相互作用复杂得多,因此引入了套接字作为通信端口,随着UNIX 操作系统的广泛使用,Socket 亦当之无愧的成为了最流行的网络通信程序接口之一。套接字存在于其特定的通信域(即地址族)中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念,只有隶属于同一地址族的套接字才能建立对话(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序),Windows Sockets V1.0 目前只支持网际域(AF_INET),所有使用网际协议簇的进程均适用于该域。一般情况下除

22、非通信协议支持,只有相同类型的套接字方能相互传递数据,Windows Sockets V1.1 版主要支持两种类型的套接字:流式套接字和数据报套接字,还有一种是原始套接字,但为保证网络应用程序的兼容性,一般不鼓励使用原始套接字。流式套接字(SOCK_STREAM):该类套接字提供了面向连接的、可靠的、数据无错并且无重复的数据发送服务。而且发送的数据是按顺序接收的。所有利用该套接字进行传递的数据均被视为连续的字节流的并且无长度限制。这对数据的稳定性、正确性和发送/接收顺序要求严格的应用十分适用,TCP协议使用该类接口。但其对线路的占用率相对提高。流式套接字的实现屡见不鲜,如远程登录(TELNET

23、)、文件传输协议(FTP)等均使用了流式套接字。数据报式套接字(SOCK_DGRAM):数据报式套接字提供了面向无连接的服务 , 它独立的数据包形式发送数据( 数据包长度不能大于32KB),不提供正确性检查,也不保证各数据包的发送顺序,因此,可能出现数据的重发、丢失等现象,并且接收顺序由具体路由决定。然而,数据报的实现对网络线路占用率较低。NFS(网络文件系统)即是采用此类套接字、在TCP/IP 协议族中,UDP使用该类接口。原始套接字(SOCK_RAW):该套接字一般不会出现在高级网络接口的实现中,因为它是直接针对协议的较低层( 如IP、TCP、UDP 等)直接访问的。常用于检验新的协议实现

24、或访问现有服务中配置的新设备,如前所述,一般不提倡他的直接应用。2、套接字编程基本概念进程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如UNIX BSD中的管道(pipe)、命名管道(named pipe)和软中断信号(signal),UNIX system V的消息(message)、共享存储区(shared memory)和信号量(semaphore)等,但都仅限于用在本机进程之间通信。网间进程通信要解决的是不同主机进程间的相互通信问题(可把同机进程通信看作是其中的特例)。为此,

25、首先要解决的是网间进程标识问题。同一主机上,不同进程可用进程号(process ID)唯一标识。但在网络环境下,各主机独立分配的进程号不能唯一标识该进程。例如,主机A赋于某进程号5,在B机中也可以存在5号进程,因此,“5号进程”这句话就没有意义了。其次,操作系统支持的网络协议众多,不同协议的工作方式不同,地址格式也不同。因此,网间进程通信还要解决多重协议的识别问题。为了解决上述问题,TCP/IP协议引出了几个概念。(1)端口网络中可以被命名和寻址的通信端口,是操作系统可分配的一种资源。 按照OSI七层协议的描述,传输层与网络层在功能上的最大区别是传输层提供进程通信能力。从这个意义上讲,网络通信

26、的最终地址就不仅仅是主机地址了,还包括可以描述进程的某种标识符。为此,TCP/IP协议提出了协议端口(protocol port,简称端口)的概念,用于标识通信的进程。端口是一种抽象的软件结构(包括一些数据结构和I/O缓冲区)。应用程序(即进程)通过系统调用与某端口建立连接(binding)后,传输层传给该端口的数据都被相应进程所接收,相应进程发给传输层的数据都通过该端口输出。在TCP/IP协议的实现中,端口的操作类似于一般的I/O操作,进程获取一个端口,相当于获取本地唯一的I/O文件,可以用一般的读写原语访问。 类似于文件描述符,每个端口都拥有一个叫端口号(port number)的整数型标

27、识符,用于区别不同端口。由于TCP/IP传输层的两个协议TCP和UDP是完全独立的两个软件模块,因此各自的端口号也相互独立,如TCP有一个255号端口,UDP也可以有一个255号端口,二者并不冲突。 端口号的分配是一个重要问题。有两种基本分配方式:第一种叫全局分配,这是一种集中控制方式,由一个公认的中央机构根据用户需要进行统一分配,并将结果公布于众。第二种是本地分配,又称动态连接,即进程需要访问传输层服务时,向本地操作系统提出申请,操作系统返回一个本地唯一的端口号,进程再通过合适的系统调用将自己与该端口号联系起来(绑扎)。TCP/IP端口号的分配中综合了上述两种方式。TCP/IP将端口号分为两

28、部分,少量的作为保留端口,以全局方式分配给服务进程。因此,每一个标准服务器都拥有一个全局公认的端口(即周知口,well-known port),即使在不同的机器上,其端口号也相同。剩余的为自由端口,以本地方式进行分配。TCP和UDP均规定,小于256的端口号才能作保留端口。(2)地址网络通信中通信的两个进程分别运行在不同的机器上。在互连网络中,两台机器可能位于不同的网络,这些网络通过网络互连设备(网关,网桥,路由器等)连接。因此需要三级寻址:a. 某一主机可与多个网络相连,必须指定一特定网络地址; b. 网络上每一台主机应有其唯一的地址; c. 每一主机上的每一进程应有在该主机上的唯一标识符。

29、 通常主机地址由网络ID和主机ID组成,在TCP/IP协议中用32位整数值表示;TCP和UDP均使用16位端口号标识用户进程。(3)网络字节顺序不同的计算机存放多字节值的顺序不同,有的机器在起始地址存放低位字节(低价先存),有的存高位字节(高价先存)。为保证数据的正确性,在网络协议中须指定网络字节顺序。TCP/IP协议使用16位整数和32位整数的高价先存格式,它们均含在协议头文件中。(4)连接两个进程间的通信链路称为连接。连接在网络中表现为一些缓冲区和一组协议机制,在外部表现出比无连接高的可靠性。(5)半相关综上所述,网络中用一个三元组可以在全局唯一标志一个进程:(协议,本地地址,本地端口号)

30、 这样一个三元组,叫做一个半相关(half-association),它指定连接的每半部分。(6)全相关一个完整的网间进程通信需要由两个进程组成,并且只能使用同一种高层协议。也就是说,不可能通信的一端用TCP协议,而另一端用UDP协议。因此一个完整的网间通信需要一个五元组来标识:(协议,本地地址,本地端口号,远地地址,远地端口号)这样一个五元组,叫做一个相关(association),即两个协议相同的半相关才能组合成一个合适的相关,或完全指定组成一连接。(7)顺序在网络传输中,两个连续报文在端端通信中可能经过不同路径,这样到达目的地时的顺序可能会与发送时不同。“顺序”是指接收数据顺序与发送数据

31、顺序相同。TCP协议提供这项服务。(8)流控制在数据传输过程中控制数据传输速率的一种机制,以保证数据不被丢失。TCP协议提供这项服务。2、服务方式在网络分层结构中,各层之间是严格单向依赖的,各层次的分工和协作集中体现在相邻层之间的界面上。“服务”是描述相量相邻层之间关系的抽象概念,即网络中各层向紧邻上层提供的一组操作。下层是服务提供者,上层是请求服务的用户。服务的表现形式是原语(primitive),如系统调用或库函数。系统调用是操作系统内核向网络应用程序或高层协议提供的服务原语。网络中的n层总要向n+1层提供比n-1层更完备的服务,否则n层就没有存在的价值。在OSI的术语中,网络层及其以下各

32、层又称为通信子网,只提供点到点通信,没有程序或进程的概念。而传输层实现的是“端到端”通信,引进网间进程通信概念,同时也要解决差错控制,流量控制,数据排序(报文排序),连接管理等问题,为此提供不同的服务方式: 面向连接(虚电路)或无连接 面向连接服务是电话系统服务模式的抽象,即每一次完整的数据传输都要经过建立连接,使用连接,终止连接的过程。在数据传输过程中,各数据分组不携带目的地址,而使用连接号(connect ID)。本质上,连接是一个管道,收发数据不但顺序一致,而且内容相同。TCP协议提供面向连接的虚电路。 无连接服务是邮政系统服务的抽象,每个分组都携带完整的目的地址,各分组在系统中独立传送

33、。无连接服务不能保证分组的先后顺序,不进行分组出错的恢复与重传,不保证传输的可靠性。UDP协议提供无连接的数据报服务。2.2 Windows Socket网络编程技术2.2.1 Winsock简介为了方便网络编程,Microsoft联合了其他几家公司共同制定了一套Windows下的网络编程接口,即Windows Sockets规范,它不是一种网络协议,而是一套开放的、支持多种协议的Windows下的网络编程接口。现在的Winsock已经基本上实现了与协议无关,你可以使用Winsock来调用多种协议的功能,但较常使用的是TCP/IP协议。Socket实际在计算机中提供了一个通信端口,可以通过这个

34、端口与任何一个具有Socket接口的计算机通信。应用程序在网络上传输和接收的信息都通过这个Socket接口来实现。Winsock规范定义了一套可使网络程序开发人员在Windows下开发标准的TCP/IP网络程序接口,它不仅包含人们所熟悉的Berkeley Socket风格的库函数,还包含了一组针对Windows的扩展库函数,以使程序员能充分地利用Windows消息驱动机制、异步网络事件选择方式进行编程。Winsock规范定义并记录了任何使用API与Internet通讯协议(ISP通常指TCP/IP)连接。应用程序使用Windows Sockets的API,而Windows Sockets又利用

35、下层的网络通信协议与操作系统以产生实际的通信。2.2.2 Winsock通信机制应用程序的网络通信归根结底是利用相同的通信协议来完成信息的传输,应用程序和Winsock都工作在Windows的用户模式下,操作系统仅仅通过Winsock是不能完成网络间的通信,还需要底层的支持,而套接字仿真器(套接字核心模式驱动程序)和传输驱动程序接口(Transport Driver Interface,TDI)是负责操作系统核心态环境下的网络通信,起到了Winsock和传输协议之间的通信桥梁作用。如图2.2所示,Winsock是网络通信应用程序于套接字仿真器间的接口,TDI是套接字仿真器和传输协议间的接口套接

36、字核心模式,驱动程序复杂连接和缓冲区管理,以便向应用程序提供套接字仿真(在AFDSYS文件中实现),同时负责与底层传输驱动程序对话传输驱动程序接口(TDI)负责核心模式驱动程序与传输协议间的通信。当应用程序利用Winsock发送和接收数据时,并不是由Winsock从网络上发送和接收数据的,而是由核心模式驱动程序AFDSYS负责管理发送和接收缓冲区来发送和接收数据。也就是说,当应用程序调用send或WSASend函数来发送数据时,AFDSYS将把数据复制进他自己的发送缓冲区,然后send后WSASend函数立即返回AFDSYS在后台负责把数据发送出去,远程客户端接收数据的情况也类似,由接收方的A

37、FDSYS在后台负责把数据复制到自己的接收缓冲区,然后当应用程序调用recv后WSARecv函数来接收数据时,把数据由AFDSYS管理的接收缓冲区复制到应用程序提供的缓冲区中。 AFDSYS管理的发送缓冲区SO-SNDBUF和接收缓冲区SO-RCVBUF在缺省时两个缓冲区的大小都为8192个字节,但可以根据实际要求由应用程序设定,由于我们传输的对象可能是大数据量文件,因此需要对系统的发送缓冲区和接收缓冲区作相应的设定,以保障大数据量的文件数据的发送和接收。Sockets的实质是通信端点的一种抽象,它提供一种发送和接受数据的机制。根据通信性质不同可分为:Stream Sockets(流式套接字)

38、和Datagram Sockets(数据报套接字),其中Stream Sockets提供无差错的、面向连接的、无长度限制的双向字节流传输,适应于处理大量数据,尤其适合于FTP服务。应用程序套接字套接字仿真器传输驱动程序接口传输协议图2.2 套接字通信机制2.2.3 Winsock编程模型1、建立一个SocketWinsock函数含有三个参数,“协议簇”参数指明像TCP/IP协议组这样的一组相关协议,“Socket类型”参数指明参数指明程序是进行数据报传输还是字节流传输,“协议”参数定义了协议簇内程序欲使用的具体协议(如TCP或UDP)。由于编程时必须指定程序使用的协议簇,因而能够为使用不同协议

39、组和地址格式的网络建立相同的接口。也就是说,本函数的正确调用可使Winsock接口运行在多个网络上。下面语句显示了一个典型的具体Winsock函数调用:Socket_handle=Socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);这个Winsock使用Internet协议簇(PF_INET)的TCP协议(IPPROTO_TCP)进行字节流(SOCK_STREAM)通信。当程序调用Winsock函数建立一个新Socket时,Winsock将为一个内部数据结构分配内存,此结构中保存有关此Socket的信息。2、配置一个Socket程序可使用Winsock中不同的函数来

40、配置一个Socket。每个Socket需要五种信息:本地和远地本机的IP地址、本地和远地进程的协议端口、连接使用的协议。面向连接的协议在连接端点之间建立一条虚电路,面向连接的客户程序不必关心网络软件使用怎样的本地地址传输数据。建立好连接后,客户程序依靠TCP协议给它传送数据。因此面向连接的客户程序不需指明本地协议端口,它提供给Socket的唯一地址信息是远地服务器信息(IP地址和协议端口)。Winsock自动保存本地IP地址和选择本地协议端口,并确保客户程序收到传输层送给本地协议端口的所有数据。也就是说,Winsock为程序选择协议端口,当数据到达此端口时通知程序,程序不必关心Winsock使

41、用哪一个协议端口。在前一步已建立的Socket基础上,面向连接的客户程序使用connect函数来配置Socket。result=connect(“Socket句柄”,“远地Socket地址”,“远地Socket地址长度”);此时,内部数据结构就包含了网络通信必须的五种信息。只有面向连接的客户进程才启动与远地服务器Socket的直接连接。无连接协议不建立与远地服务器的直接连接。使用无连接协议的客户程序必须发送一个带有服务请求的数据报并等待应答,远地服务器的应答以数据报的形式到达。Winsock用bind函数给Socket指定一个本地IP地址和一个协议端口,其典型调用如下:result=bind(

42、“Socket句柄”,“本地Socket地址”,“本地Socket地址长度”);服务器程序使用bind函数用Winsock登记一个协议端口,程序告诉Winsock监视哪一个协议端口的数据传送,Winsock接着告诉传输层将此协议端口收到的数据传送给Winsock。3、使用Socket使用Socket之前必须调用WSAStartup函数。该函数的第一个参数指明程序请求使用的Socket版本,其中高位字节指明副版本、低位字节指明主版本;操作系统利用第二个参数返回请求的Socket的版本信息。当一个应用程序调用WSAStartup函数时,操作系统根据请求的Socket版本来搜索相应的Socket库,

43、然后绑定找到的Socket库到该应用程序中。以后应用程序就可以调用所请求的Socket库中的其它Socket函数了。该函数执行成功后返回0。应用程序在完成对请求的Socket库的使用后,要调用WSACleanup函数来解除与Socket库的绑定并且释放Socket库所占用的系统资源。Closesocket函数用来关闭一个描述符为s套接字。由于每个进程中都有一个套接字描述符表,表中的每个套接字描述符都对应了一个位于操作系统缓冲区中的套接字数据结构,因此有可能有几个套接字描述符指向同一个套接字数据结构。套接字数据结构中专门有一个字段存放该结构的被引用次数,即有多少个套接字描述符指向该结构。当调用c

44、losesocket函数时,操作系统先检查套接字数据结构中的该字段的值,如果为1,就表明只有一个套接字描述符指向它,因此操作系统就先把s在套接字描述符表中对应的那条表项清除,并且释放s对应的套接字数据结构;如果该字段大于1,那么操作系统仅仅清除s在套接字描述符表中的对应表项,并且把s对应的套接字数据结构的引用次数减1。Closesocket函数如果执行成功就返回0,否则返回SOCKET_ERROR。服务程序可以调用listen函数使其流套接字s处于监听状态。处于监听状态的流套接字s将维护一个客户连接请求队列,该队列最多容纳backlog个客户连接请求。假如该函数执行成功,则返回0;如果执行失败

45、,则返回SOCKET_ERROR。服务程序调用accept函数从处于监听状态的流套接字s的客户连接请求队列中取出排在最前的一个客户请求,并且创建一个新的套接字来与客户套接字创建连接通道,如果连接成功,就返回新创建的套接字的描述符,以后与客户套接字交换数据的是新创建的套接字;如果失败就返回INVALID_SOCKET。该函数的第一个参数指定处于监听状态的流套接字;操作系统利用第二个参数来返回新创建的套接字的地址结构;操作系统利用第三个参数来返回新创建的套接字的地址结构的长度。2.3 图像技术Windows系统不允许应用程序直接访问视频存储区,而是提供了一个抽象的接口,称作图形设备接口(GDI)。

46、Windows已经提供了各种显示卡的驱动程序,这样我们的程序就不用关心与系统相连的显示卡的类型,可以通过调用GDI函数来和硬件打交道。各种GDI函数会自动参考被称为设备环境的数据结构。Windows会自动将设备环境结构映射到相应的物理设备,并且提供正确的输入输出指令,GDI在处理速度上几乎和直接进行视频访问一样快。BMP图形文件是Windows采用的图形文件格式,在Windows环境下运行的所有图像处理软件都支持BMP图像文件格式。Windows系统内部各图像绘制操作都是以BMP为基础的。Windows3.0以前的BMP图文件格式与显示设备有关,因此把这种BMP图像文件格式称为设备相关位图(D

47、DB)格式。Windows 3.0以后的BMP图像文件与显示设备无关,因此把这种BMP图像文件格式称为设备无关位图(DIB)格式。位图文件可看成由4个部分组成;位图文件头(bitmap-fileheader)、位图信息头(bitmap-information header)、彩色表(color table)和定义位图的字节阵列。(1)BMP文件头BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。其结构定义如下:typedefstruct tagBITMAPFILEHEADERWORD bfrype;位图文件的类型,必须为BMDWORD bfSize;位图文件的大小,以字节

48、为单位WORD bIRescrvcdl;图文件保留字,必须为0WORD bIReserved2;位图文件保留字,必须为0DWORD bfOffBits;位图数据的起始位置,以相对于位图文件头的偏移量表示,单位是字节BITMAPFILEHEADER;(2)BMP位图信息头BMP位图信息头数据用于说明位图的尺寸等信息,其结构定义如下:typedefstruct tagBITMAPINFOHEADERDWORD biSize;结构所占用字节数LONG biWidth;位图的宽度,以像素为单位LONG biHeight; 位图的高度,以像素为单位WORD biplanes; 目标设备的级别,必须为lW

49、ORD biBitCount;每个像素所需的位数,必须是l(双色),4(16色),8(256色)或24(真彩色)之一DWORD biCompression; 位图压缩类型,必须是0(不压缩),1(BI_RLE8压缩类型)或2(BI RLE4压缩类型)之一DWORD biSizeImage;位图的大小,以字节为单位LONG biXPelsPerMeter;位图水平分辨率。每米像素数LONG biYPelsPerMeter;位图垂直分辨率,每米像素数DWORD biClrUsed; 位图实际使用的颜色表中的颜色数DWORD biClrImportant; 位图显示过程中重要的颜色数BITMAPIN

50、FOHEADER;(3)调色板(颜色表)调色板用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色。ROBQUAD结构的定义如下:typedefstruct tagRGBQUADBYTE rgbBlue; 蓝色的亮度(值范围为0255)BYTE gbGreen; 绿色的亮度(值范围为0255)BYTE rgbRed;红色的亮度(值范围为0255)BYTE rgbReserved;保留,必须为0RGBQUAD;颜色表中RGBQUAD结构数据的个数由biBitCount来确定:当biBitCount=1,4,8时,分别有2,16,256个表项;当biBitC

51、ount=24时,没有颜色表项。位图信息头和颜色表组成位图信息,B1TMAPINFO结构定义如下:typcdefstruct tagBITMAPINFOBITMAPINFoHEADER bmiI-Ieader; 位图信息头RGBQUAD bmiColors; 颜色表BITMAPINFO;(4)位图数据位图数据记录了位图的每一个像素值,记录顺序是扫描行内从左到右,扫描行之问从下到上。位图的一个像素值所占的字节数:当biBitCount=1时,8个像素占1个字节;当biBitCount=4时,2个像素占1个字节;当biBitCount=8时,1个像素占1个字节;当biBitCount=24时,1个

52、像素占3个字节。Windows规定下个扫描行所占的字节数必须是4的倍数(即以long为单位),不足的以0填充。一个扫描行所占的字节数计算方法:DataSizePerLin=(biWidth*biBitCount+31)8;一个扫描行所占的字节数DataSizePcrLincr=DataSizePerLine4*4;字节数必须是4的倍数位图数据的大小(不压缩情况下)DataSize=DataSizePerLine*biHeight;2.4 图像压缩编码解码位图原稿数字化后的数据量非常惊人,在硬盘上存储时颇占地盘,并给传输带来了很多不便,所以图像压缩得到了广泛的运用。压缩的目的就是满足存储容量和传

53、输带宽的要求,而付出的代价是大量的计算。图像数据压缩技术总的来说就是利用图像数据固有的冗余性和相干性,将一个大的数据文件转换成较小的同性质的文件。 图像压缩主要根据两个基本事实来实现。一是图像数据中有许多重复的数据,使用数学方法来表示这些重复数据就可以减少数据量;二是人的眼睛对图像细节和颜色的辨认有一个极限,把超过极限的部分去掉,也就达到了压缩数据的目的。利用前一个事实的压缩技术就是无损压缩技术,即压缩后的图像数据还原后与未压缩时严格相同,没有失真,如TIFF图像文件格式;利用后一个事实的压缩技术就是有损压缩技术,即压缩后的图像数据与未压缩时有所不同,但不影晌人们对原始资料表达的信息造成误解,

54、如JPEG图像文件格式。实际的图像压缩其实是综合使用各种有损和无损压缩技术来实现的。采取有损压缩的方法进行数据压缩,在解压时会造成较大的误差扩。所以本系统采用的数据压缩方式是无损压缩。 图像压缩编码对图像采用不同的表达方式以减小表示图像所需的数据量,所以也常称为数据压缩。压缩的理论基础是信息论。从信息论的角度来看,压缩就是去掉信息中的冗余,即保留不确定的信息,去掉确定的信息(可推知的),也就是用一种更接近信息本质的描述来代替原有冗余的描述。这个本质的因素就是信息量(即不确定因素)。假如用n1和n2分别代表用来表达相同信息的2个数据集合中的信息载体单位的个数,那么压缩率CR为:Cr=nl/n2,

55、一般情况下Cr在开区间(0,+)中取值。在数字图像压缩中,有3种基本的数据冗余:像素相关冗余,编码冗余,心理视觉冗余。如果能减少或消除其中的一种或多种冗余,就能取得数据压缩的效果。2.4.1 霍夫曼压缩霍夫曼是1952年为文本文件建立的,其基本原理是频繁使用的数据用较短的代码代替,很少使用的数据用较长的代码代替,每个数据的代码各不相同。这些代码都是二进制码,且码的长度是可变的。如: 有一个原始数据序列,ABACCDAA则编码为A(0),B(10),C(110), D(111),压缩后为010011011011100。产生霍夫曼编码需要对原始数据扫描两遍,第一遍扫描要精确地统计出原始数据中的每个

56、值出现的频率,第二遍是建立霍夫曼树并进行编码,由于需要建立二叉树并遍历二叉树生成编码,因此数据压缩和还原速度都较慢,但简单有效,因而得到广泛的应用。哈夫曼编码是无损压缩当中最好的方法。它使用预先二进制描述来替换每个符号,长度由特殊符号出现的频率决定。常见的符号需要很少的位来表示,而不常见的符号需要很多为来表示。哈夫曼算法在改变任何符号二进制编码引起少量密集表现方面是最佳的,然而,它并不处理符号的顺序和重复或序号的序列。2.4.2 Run Length压缩原理是将一扫描行中的颜色值相同的相邻像素用一个计数值和那些像素的颜色值来代替。例如:aaabccccccddeee,则可用3a1b6c2d3e

57、来代替。对于拥有大面积,相同颜色区域的图像,用RLE压缩方法非常有效。由RLE原理派生出许多具体行程压缩方法:(1)PCX行程压缩方法: 该算法实际上是位映射格式到压缩格式的转换算法,该算法对于连续出现1次的字节Ch,若Ch0xc0则压缩时在该字节前加上0xc1,否则直接输出Ch,对于连续出现N 次的字节Ch,则压缩成0xc0N,Ch这两个字节,因而N最大只能为ffc0=3fh(十进制为63),当N大于63时, 则需分多次压缩。(2)BI_RLE8压缩方法:在Windows的位图文件中采用了这种压缩方法。该压缩方法编码也是以两个字节为基本单位。其中第一个字节规定了用第二个字节指定的颜色重复次数

58、。如编码 0504表示从当前位置开始连续显示5个颜色值为04的像素。当第二个字节为零时第二个字节有特殊含义:0表示行末;1表示图末;2转义后面2个字节, 这两个字节分别表示下一像素相对于当前位置的水平位移和垂直位移。这种压缩方法所能压缩的图像像素位数最大为8位(256色)图像。(3)BI_RLE压缩方法:该方法也用于Windows位图文件中,它与 BI_RLE8编码类似,唯一不同是:BI_RLE4的一个字节包含了两个像素的颜色,因此,它只能压缩的颜色数不超过16的图像。因而这种压缩应用范围有限。(4)紧缩位压缩方法(Packbits):该方法是用于Apple公司的Macintosh机上的位图数

59、据压缩方法,TIFF 规范中使用了这种方法,这种压缩方法与BI_RLE8压缩方法相似,如1c1c1c2132325648 压缩为:83 1c 21 81 32 56 48,显而易见,这种压缩方法最好情况是每连续128个字节相同,这128个字节可压缩为一个数值7f。这种方法还是非常有效的。3 远程控制系统总体设计3.1 系统需求分析3.1.1 用户需求作为管理人员,需要规范规范员工对计算机的使用、及时发现并解决工作中存在的问题,作为维护人员需要实时地监控联网计算机或网外计算机的运行情况、根据需要随时改变联网计算机系统设置,对出现故障的计算机能够通过网络及时修复。这是当远程访问软件出场的时候了,它

60、能帮助你访问远程计算机就像访问自己的计算机一样,距离不再是问题。远程桌面控制显示另一台计算机的屏幕(透过网际网络或本地网络)在您自己的屏幕上。该程序允许你利用你的鼠标和键盘来控制其他的计算机远程。这意味着您可以在远程计算机工作,就像你坐在它前面一样。3.1.2 可采用的技术方案远程监控系统的实现主要采用了套接字这项技术和虚拟鼠标键盘消息的API,在大多数情况下套接字是底层传输代码的必选技术。Socket可以看成在两个程序进行通信连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中。该程序采用TCP协议,因为流

61、控和差控的存在使得传输更具有稳定性。UDP虽然效率更高,但是有掉包的情况出现,这是本方案所不允许的。通过Socket传递的虚拟消息结构体到对端,被对端主机解释并虚拟,最终达到程序目的。3.2 可行性技术方案 3.2.1 技术可行性本次开发所用到的一系列的技术已是累积了几十年的技术,这些技术在这么多年的发展中并没有被淘汰,反而是越来越来热门。当初远程控制这门技术在DOS时代就已经存在,只是受网络的制约,但是此时这门技术还是受网络技术制约着。网络流量的问题是造成所有通信程序的不稳定性的罪魁祸首。但是本程序在局域网中是完全能够实现的,而且本程序也是专门为企业网内部所设计,因为数据信息没被加密,如果想

62、走Internet,则需建立VPN。3.2.2 经济可行性软件成本低廉,要的只是两个ISP分发的IP地址,而且这也多用于局域网或企业网等内网,就更谈不上成本上的问题。3.3 系统的基本框架系统的基本框架如图3.1,在支持TCP/IP协议的网络中,本地计算机与远程主机通过物理网络相连。远程主机运行被控端程序,监听固定端口等待连接;本地计算机运行主控端程序,连接指定端口。两端的程序通过套接字Socket建立连接。并通过Socket输入输出流收发信息,实现监视和控制功能。Socket通过TCP/IP协议实现两端计算机的数据通信。接收发送发送接收连接远程主机显示桌面信息发送控制信息等待远程连接获取桌面

63、信息执行控制命令SocketTCP/IP物理网络支持TCP/IP协议的网络建立连接图3.1 系统基本框架 本系统的流程图如图3.2所示。建立连接是连接服务器连接成功显示远程桌面实施远程控制 图像压缩 键盘控制 鼠标控制 显示网格改变色彩模式否启动监听服务器客户端Socket识别远程消息发送桌面信息响应控制消息响应键盘消息响应鼠标消息发送发送图3.2 系统流程图3.4 模块划分及功能设计总体功能结构包括主控端(客户端)和被控端(服务器)两大部分。其中主控端的主要实现功能为,本地的配置管理、接收远程主机发送的桌面信息并绘制到组件显示,实现监视功能和发送控制信息实现对远程主机的控制功能;被控端的主要功能为本地配置管理、获取并发送桌面图片为主控端的监视提供信息服务和响应主控端的控制请求模块,按控制信息进行指定的操作。4 系统的详细设计与实现4.1 界面设计4.1.1 客户端界面界面

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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