基于Socket的网络编程技术及其实现.docx

上传人:b****5 文档编号:12279620 上传时间:2023-04-17 格式:DOCX 页数:70 大小:1.61MB
下载 相关 举报
基于Socket的网络编程技术及其实现.docx_第1页
第1页 / 共70页
基于Socket的网络编程技术及其实现.docx_第2页
第2页 / 共70页
基于Socket的网络编程技术及其实现.docx_第3页
第3页 / 共70页
基于Socket的网络编程技术及其实现.docx_第4页
第4页 / 共70页
基于Socket的网络编程技术及其实现.docx_第5页
第5页 / 共70页
点击查看更多>>
下载资源
资源描述

基于Socket的网络编程技术及其实现.docx

《基于Socket的网络编程技术及其实现.docx》由会员分享,可在线阅读,更多相关《基于Socket的网络编程技术及其实现.docx(70页珍藏版)》请在冰豆网上搜索。

基于Socket的网络编程技术及其实现.docx

基于Socket的网络编程技术及其实现

摘要

随着网络技术的飞速发展,计算机给人类文明带来了翻天覆地的变化,原来物理上的接口已不能满足网络通信的要求了。

TCP/IP(TransmissionControlProtocol/InternetProtocol)协议作为网络通信的基本协议就解决了这一通信难题,它引入了一种称之为“Socket”的应用程序接口。

Socket是建立在传输层协议上的一种套接字规范,基于Socket的网络编程已是一项现如今被广泛利用的技术,很大程度上方便了人们的生活。

本文以VC++6.0为开发环境,利用套接字的网络编程规范,实现运行不同桌面操作系统的计算机之间的相互监控的远程控制系统。

该系统对远程主机的监控主要包括:

实时监视桌面状态、修改系统配置文件、控制鼠标、键盘等基本操作。

系统可以让本地计算机通过局域网访问不同的远程计算机,也可以进行网际主机控制。

本文首先针对远程控制系统的关键技术进行了深入研究,并对远程控制系统的做出了需求分析。

设计了系统的基本框架和各个模块的功能,主要针对服务器模块,客户端模块,消息模拟模块等进行了具体实现。

最后对系统进行了功能测试和性能分析,并得出所期望的测试结果。

关键字:

Socket;VC++;网络编程;远程控制

Abstract

Withtherapiddevelopmentofnetworktechnology,computerhasbroughthumancivilizationaundergoneenormouschanges,theoriginalphysicalinterfacehasbeenunabletomeettherequirementsofnetworkcommunication.AsthenetworkcommunicationprotocolTCP/IPprotocolsolvedthebasicproblemofthiscommunication,theintroductionofatechniquecalled"Socket"applicationprograminterface.Socketnetworkbasedonprogrammingisawidelyutilizednowadays.

Inthispaper,VC6.0developmentenvironment,socket-basednetworkprogramming,implementationandprocesscontrolsystemthatallowsthelocalcomputerthroughtheLANtoaccessdifferentremotecomputers,anditsoperationcanalsobecarriedoutInternethost.

Thisarticlefirstbrieflyintroducestheremotedesktopmonitoringsystemkeytechnologies,aswellassystemrequirementsanalysis.Thebasicframeworkofthesystemdesignandfunctionofeachmodule;thenintroducesthevariousfunctionalmodulesofthespecificimplementationsteps.Finally,testmethodsandresults,theadvantagesanddisadvantagesofthesystemaresummarized.

Keywords:

Socket;VC++;NetworkProgramming;RemoteControl

目录

1绪论1

1.1课题的背景和意义1

1.2课题的国内外研究现状1

1.3课题的结构安排2

2Socket网络编程的关键技术3

2.1Socket网络编程理论基础3

2.1.1OSI七层网络模型与TCP/IP四层网络模型3

2.1.2Socket编程基本原理6

2.2WindowsSocket网络编程技术10

2.2.1Winsock简介10

2.2.2Winsock通信机制10

2.2.3Winsock编程模型11

2.3图像技术13

2.4图像压缩编码解码16

2.4.1霍夫曼压缩17

2.4.2RunLength压缩17

3远程控制系统总体设计19

3.1系统需求分析19

3.1.1用户需求19

3.1.2可采用的技术方案19

3.2可行性技术方案19

3.2.1技术可行性19

3.2.2经济可行性20

3.3系统的基本框架20

3.4模块划分及功能设计21

4系统的详细设计与实现22

4.1界面设计22

4.1.1客户端界面22

4.1.2服务器端界面24

4.2客户端模块设计与实现25

4.3服务器模块设计与实现27

4.4消息模拟功能的实现29

4.5流数据的实现30

4.6图形编码30

5系统实施及测试34

5.1测试环境搭建34

5.2系统功能和性能测试34

5.2.1客户端显示测试34

5.2.2鼠标键盘功能测试39

5.3测试结果42

结论43

致谢44

参考文献45

附录A英文原文47

附录B中文翻译58

附录C源程序65

 

1绪论

1.1课题的背景和意义

随着计算机网络技术的发展,原来物理上的接口(如键盘、鼠标、网卡、显示卡等输入、输出接口)已不能满足网络通信的要求了。

TCP/IP协议作为网络通信的基本协议就解决了这一通信难题。

TCP/IP协议集成到操作系统的内核中,在TCP/IP协议中引入了一种称之为“Socket”的应用程序接口。

Socket是建立在传输层协议是TCP(TransmissionControlProtocol)和UDP(UserDatagramProtocol)上的一种套接字规范,它最初由美国加州Berkley大学提出,是UNIX操作系统开发的网络通信接口,它定义了两台计算机间的通信规范(也是一种编程规范)。

如果两台计算机是利用一个“通道”进行通信,那么这个“通道”的两端就是套接字。

Socket屏蔽了底层通信软件和具体操作系统的差异,使得任何两台安装了TCP协议软件和实现了Socket规范的计算机之间的通信成为可能。

Socket接口是TCP/IP网络最为通用的API(ApplicationProgramInterface),也是在Internet上进行应用开发最通用的API。

1.2课题的国内外研究现状

基于Socket的网络编程技术在人们不断的研究和探索下,日益的完善与成熟,已被广泛的应用在通信,医疗等各个领域。

比如市面上比较普遍的QQ、UC、飞鸽传书等以内部网络为中心的资源共享系统,都应用到套接字网络编程技术。

目前,常用的Socket类型有两种,流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。

流式是一种面向连接的Socket,针对于面向连接的TCP服务应用,实现了无差错无重复的顺序数据传输,无长度限制;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用,定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠。

在现在的网络应用中,通信双方最常见的交互模式便是Client/Server模式。

客户/服务器模式通常采用监听/连接的方式实现,服务器端应用程序在一个端口监听对服务的请求。

也就是说,服务进程一直处于休眠状态,直到有一个客户对这个服务提出了连接请求,此时服务线程被“唤醒”并为客户。

目前,大多数远程进程间通信代码是用Socket编写的,实际应用中用Socket传输信息并不是独立的,它在多线程的处理环境中应用更为广。

1.3课题的结构安排

第1章论述了Socket网络编程的的研究背景和意义,Socket网络编程技术的国内外研究现状。

第2章论述了Socket网络编程的关键技术:

网络编程的理论基础,WindowsSocket网络编程技术,图像技术,图像压缩的编码及解码,包括霍夫曼压缩,和RunLength(行程长度)压缩等。

第3章对系统进行了总体设计。

总体设计包括需求分析、可行性技术方案,框架结构、模块划分以及模块的功能定义。

第4章给出了系统详细的设计和具体实现。

详细设计包括了界面设计,客户端模块设计与实现,服务器模块设计与实现,消息模拟功能的实现,流数据的实现,图形编码等。

第5章对系统进行了测试,包括测试的环境、过程和测试结论。

2Socket网络编程的关键技术

2.1Socket网络编程理论基础

2.1.1OSI七层网络模型与TCP/IP四层网络模型

1、OSI网络分层参考模型

网络协议设计者不应当设计一个单一、巨大的协议来为所有形式的通信规定完整的细节,而应把通信问题划分成多个小问题,然后为每一个小问题设计一个单独的协议,这样做使得每个协议的设计、分析、时限和测试比较容易。

协议划分的一个主要原则是确保目标系统有效且效率高。

为了提高效率,每个协议只应该注意没有被其他协议处理过的那部分通信问题;为了主协议的实现更加有效,协议之间应该能够共享特定的数据结构,同时这些协议的组合应该能处理所有可能的硬件错误以及其它异常情况。

为了保证这些协议工作的协同性,应当将协议设计和开发成完整的、协作的协议系列(即协议簇),而不是孤立地开发每个协议。

在网络历史的早期,ISO(国际标准化组织)和国际电报电话咨询委员会(CCITT)共同出版了开放系统互联的七层参考模型。

计算机操作系统中的网络过程包括从应用请求(在协议栈的顶部)到网络介质(底部),OSI参考模型如图2.1把功能分成七个分立的层次。

第一层:

物理层,负责最后将信息编码成电流脉冲或其它信号以用于网上传输。

它由计算机和网络介质之间的实际界面组成,可定义电气信号、符号、线的状态、时钟要求、数据编码、数据传输用的连接器。

第二层:

数据链路层,通过物理网络链路提供可靠的数据传输。

不同的数据链路层定义了不同的网络和协议特征,其中包括物理编址、网络拓扑结构、错误校验、帧序列以及流控。

第三层:

网络层,负责在源点和终点之间建立连接。

它一般包括网络寻径、流量控制、错误检查等。

相同MAC(MediaAccessControl)标准的不同网段之间的数据传输一般只涉及到数据链路层,而不同的MAC标准之间的数据传输都涉及到网络层。

例如IP路由器工作在网络层,因而可以实现多种网络间的互联。

第四层:

传输层,向高层提供可靠的端到端的网络数据流服务。

传输层的功能一般包括流控、多路传输、虚电路管理及差错校验和恢复。

流控管理设备之间的数据传输,确保传输设备不发送比接收设备处理能力大的数据;多路传输使得多个应用程序的数据可以传输到一个物理链路上;虚电路由传输层建立、维护和终止;差错校验包括为检测传输错误而建立的各种不同结构;而差错恢复包括所采取的行动(如请求数据重发),以便解决发生的任何错误。

传输控制协议(TCP)是提供可靠数据传输的TCP/IP协议族中的传输层协议。

第五层:

会话层,建立、管理和终止表示层与实体之间的通信会话。

第六层:

表示层,提供多种功能用于应用层数据编码和转化,以确保以一个系统应用层发送的信息可以被另一个系统应用层识别。

表示层的编码和转化模式包括公用数据表示格式、性能转化表示格式、公用数据压缩模式和公用数据加密模式。

第七层:

应用层,最接近终端用户的OSI层,这就意味着OSI应用层与用户之间是通过应用软件直接相互作用的。

应用层的功能一般包括标识通信伙伴、定义资源的可用性和同步通信。

因为可能丢失通信伙伴,应用层必须为传输数据的应用子程序定义通信伙伴的标识和可用性。

定义资源可用性时,应用层为了请求通信而必须判定是否有足够的网络资源。

在同步通信中,所有应用程序之间的通信都需要应用层的协同操作。

  

图2.1七层网络模型

2、TCP/IP四层网络模型

 TCP/IP分层模型(TCP/IPLayeningModel)被称作因特网分层模型(InternetLayeringModel)、因特网参考模型(InternetReferenceModel)。

TCP/IP协议被组织成四个概念层,其中有三层对应于ISO参考模型中的相应层。

ICP/IP协议族并不包含物理层和数据链路层,因此它不能独立完成整个计算机网络系统的功能,必须与许多其他的协议协同工作。

TCP/IP分层模型的四个协议层分别完成以下的功能:

第一层:

网络接口层,包括用于协作IP数据在已有网络介质上传输的协议。

实际上TCP/IP标准并不定义与ISO数据链路层和物理层相对应的功能。

相反,它定义像地址解析协议(AddressResolutionProtocol,ARP)这样的协议,提供TCP/IP协议的数据结构和实际物理硬件之间的接口。

第二层:

网间层,对应于OSI七层参考模型的网络层。

本层包含IP协议、RIP协议(RoutingInformationProtocol,路由信息协议),负责数据的包装、寻址和路由。

同时还包含网间控制报文协议(InternetControlMessageProtocol,ICMP)用来提供网络诊断信息。

第三层:

传输层,对应于OSI七层参考模型的传输层,它提供两种端到端的通信服务。

其中TCP协议提供可靠的数据流运输服务,UDP协议提供不可靠的用户数据报服务。

第四层:

应用层,对应于OSI七层参考模型的应用层和表达层。

因特网的应用层协议包括Finger、Whois、FTP(文件传输协议)、Gopher、HTTP(超文本传输协议)、Telent(远程终端协议)、SMTP(简单邮件传送协议)、IRC(因特网中继会话)、NNTP(网络新闻传输协议)等。

图2.2为TCP/IP四层模型。

图2.2TCP/IP四层模型

2.1.2Socket编程基本原理

1、套接字介绍

套接字(Socket)起初来源于UNIX,是加利福尼亚大学Berkeley分校开发的UNIX操作系统下的网络通信接口。

当TCP/IP协议被集成到UNIX内核中时,相当于在UNIX系统引入了一种新型的I/O操作,UNIX用户进程与网络协议的交互作用比用户进程与传统的I/O设备相互作用复杂得多,因此引入了套接字作为通信端口,随着UNIX操作系统的广泛使用,Socket亦当之无愧的成为了最流行的网络通信程序接口之一。

套接字存在于其特定的通信域(即地址族)中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念,只有隶属于同一地址族的套接字才能建立对话(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序),WindowsSocketsV1.0目前只支持网际域(AF_INET),所有使用网际协议簇的进程均适用于该域。

一般情况下除非通信协议支持,只有相同类型的套接字方能相互传递数据,WindowsSocketsV1.1版主要支持两种类型的套接字:

流式套接字和数据报套接字,还有一种是原始套接字,但为保证网络应用程序的兼容性,一般不鼓励使用原始套接字。

流式套接字(SOCK_STREAM):

该类套接字提供了面向连接的、可靠的、数据无错并且无重复的数据发送服务。

而且发送的数据是按顺序接收的。

所有利用该套接字进行传递的数据均被视为连续的字节流的并且无长度限制。

这对数据的稳定性、正确性和发送/接收顺序要求严格的应用十分适用,TCP协议使用该类接口。

但其对线路的占用率相对提高。

流式套接字的实现屡见不鲜,如远程登录(TELNET)、文件传输协议(FTP)等均使用了流式套接字。

数据报式套接字(SOCK_DGRAM):

数据报式套接字提供了面向无连接的服务,它独立的数据包形式发送数据(数据包长度不能大于32KB),不提供正确性检查,也不保证各数据包的发送顺序,因此,可能出现数据的重发、丢失等现象,并且接收顺序由具体路由决定。

然而,数据报的实现对网络线路占用率较低。

NFS(网络文件系统)即是采用此类套接字、在TCP/IP协议族中,UDP使用该类接口。

原始套接字(SOCK_RAW):

该套接字一般不会出现在高级网络接口的实现中,因为它是直接针对协议的较低层(如IP、TCP、UDP等)直接访问的。

常用于检验新的协议实现或访问现有服务中配置的新设备,如前所述,一般不提倡他的直接应用。

2、套接字编程基本概念

进程通信的概念最初来源于单机系统。

由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如UNIXBSD中的管道(pipe)、命名管道(namedpipe)和软中断信号(signal),UNIXsystemV的消息(message)、共享存储区(sharedmemory)和信号量(semaphore)等,但都仅限于用在本机进程之间通信。

网间进程通信要解决的是不同主机进程间的相互通信问题(可把同机进程通信看作是其中的特例)。

为此,首先要解决的是网间进程标识问题。

同一主机上,不同进程可用进程号(processID)唯一标识。

但在网络环境下,各主机独立分配的进程号不能唯一标识该进程。

例如,主机A赋于某进程号5,在B机中也可以存在5号进程,因此,“5号进程”这句话就没有意义了。

其次,操作系统支持的网络协议众多,不同协议的工作方式不同,地址格式也不同。

因此,网间进程通信还要解决多重协议的识别问题。

为了解决上述问题,TCP/IP协议引出了几个概念。

(1)端口

网络中可以被命名和寻址的通信端口,是操作系统可分配的一种资源。

按照OSI七层协议的描述,传输层与网络层在功能上的最大区别是传输层提供进程通信能力。

从这个意义上讲,网络通信的最终地址就不仅仅是主机地址了,还包括可以描述进程的某种标识符。

为此,TCP/IP协议提出了协议端口(protocolport,简称端口)的概念,用于标识通信的进程。

端口是一种抽象的软件结构(包括一些数据结构和I/O缓冲区)。

应用程序(即进程)通过系统调用与某端口建立连接(binding)后,传输层传给该端口的数据都被相应进程所接收,相应进程发给传输层的数据都通过该端口输出。

在TCP/IP协议的实现中,端口的操作类似于一般的I/O操作,进程获取一个端口,相当于获取本地唯一的I/O文件,可以用一般的读写原语访问。

类似于文件描述符,每个端口都拥有一个叫端口号(portnumber)的整数型标识符,用于区别不同端口。

由于TCP/IP传输层的两个协议TCP和UDP是完全独立的两个软件模块,因此各自的端口号也相互独立,如TCP有一个255号端口,UDP也可以有一个255号端口,二者并不冲突。

端口号的分配是一个重要问题。

有两种基本分配方式:

第一种叫全局分配,这是一种集中控制方式,由一个公认的中央机构根据用户需要进行统一分配,并将结果公布于众。

第二种是本地分配,又称动态连接,即进程需要访问传输层服务时,向本地操作系统提出申请,操作系统返回一个本地唯一的端口号,进程再通过合适的系统调用将自己与该端口号联系起来(绑扎)。

TCP/IP端口号的分配中综合了上述两种方式。

TCP/IP将端口号分为两部分,少量的作为保留端口,以全局方式分配给服务进程。

因此,每一个标准服务器都拥有一个全局公认的端口(即周知口,well-knownport),即使在不同的机器上,其端口号也相同。

剩余的为自由端口,以本地方式进行分配。

TCP和UDP均规定,小于256的端口号才能作保留端口。

(2)地址

网络通信中通信的两个进程分别运行在不同的机器上。

在互连网络中,两台机器可能位于不同的网络,这些网络通过网络互连设备(网关,网桥,路由器等)连接。

因此需要三级寻址:

a.某一主机可与多个网络相连,必须指定一特定网络地址;

b.网络上每一台主机应有其唯一的地址;

c.每一主机上的每一进程应有在该主机上的唯一标识符。

通常主机地址由网络ID和主机ID组成,在TCP/IP协议中用32位整数值表示;TCP和UDP均使用16位端口号标识用户进程。

(3)网络字节顺序

不同的计算机存放多字节值的顺序不同,有的机器在起始地址存放低位字节(低价先存),有的存高位字节(高价先存)。

为保证数据的正确性,在网络协议中须指定网络字节顺序。

TCP/IP协议使用16位整数和32位整数的高价先存格式,它们均含在协议头文件中。

(4)连接

两个进程间的通信链路称为连接。

连接在网络中表现为一些缓冲区和一组协议机制,在外部表现出比无连接高的可靠性。

(5)半相关

综上所述,网络中用一个三元组可以在全局唯一标志一个进程:

(协议,本地地址,本地端口号)

这样一个三元组,叫做一个半相关(half-association),它指定连接的每半部分。

(6)全相关

一个完整的网间进程通信需要由两个进程组成,并且只能使用同一种高层协议。

也就是说,不可能通信的一端用TCP协议,而另一端用UDP协议。

因此一个完整的网间通信需要一个五元组来标识:

(协议,本地地址,本地端口号,远地地址,远地端口号)

这样一个五元组,叫做一个相关(association),即两个协议相同的半相关才能组合成一个合适的相关,或完全指定组成一连接。

(7)顺序

在网络传输中,两个连续报文在端-端通信中可能经过不同路径,这样到达目的地时的顺序可能会与发送时不同。

“顺序”是指接收数据顺序与发送数据顺序相同。

TCP协议提供这项服务。

(8)流控制

在数据传输过程中控制数据传输速率的一种机制,以保证数据不被丢失。

TCP协议提供这项服务。

2、服务方式

在网络分层结构中,各层之间是严格单向依赖的,各层次的分工和协作集中体现在相邻层之间的界面上。

“服务”是描述相量相邻层之间关系的抽象概念,即网络中各层向紧邻上层提供的一组操作。

下层是服务提供者,上层是请求服务的用户。

服务的表现形式是原语(primitive),如系统调用或库函数。

系统调用是操作系统内核向网络应用程序或高层协议提供的服务原语。

网络中的n层总要向n+1层提供比n-1层更完备的服务,否则n层就没有存在的价值。

在OSI的术语中,网络层及其以下各层又称为通信子网,只提供点到点通信,没有程序或进程的概念。

而传输层实现的是“端到端”通信,引进网间进程通信概念,同时也要解决差错控制,流量控制,数据排序(报文排序),连接管理等问题,为此提供不同的服务方式:

面向连接(虚电路)或无连接

面向连接服务是电话系统服务模式的抽象,即每一次完整的数据传输都要经过建立连接,使用连接,终止连接的过程。

在数据传输过程中,各数据分组不携带目的地址,而使用连接号(connectID)。

本质上,连接是一个管道,收发数据不但顺序一致,而且内容相同。

TCP协议提供面向连接的虚电路。

无连接服务是邮政系统服务的抽象,每个分组都携带完整的目的地址,各分组在系统中独立传送。

无连接服务不能保证分组的先后顺序,不进行分组出错的恢复与重传,不保证传输的可靠性。

UDP协议提供无

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

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1