基于Socket的局域网通信工具的设计与实现的方法_第1页
基于Socket的局域网通信工具的设计与实现的方法_第2页
基于Socket的局域网通信工具的设计与实现的方法_第3页
基于Socket的局域网通信工具的设计与实现的方法_第4页
基于Socket的局域网通信工具的设计与实现的方法_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘要i摘 要随着计算机科学和 internet 的飞速发展,网上聊天已成为人们相互交流的一中方式,与 e-mail、电话相比,聊天服务更具有实时性和有效性。网络版的聊天软件种类繁多,如 qq、oicq、msn 等,实现随时随地上网聊天,给人们带来了很大的方便。但是这些聊天软件也存在以下不足:用户必须连接 internet;用户在工作时容易沉迷于网络聊天。为了方便单位企业内部的信息交流,避免企业内部员工使用类似 qq 等软件泄露内部信息,减少不必要的财力和人力资源浪费,开发一个局域网聊天软件是非常必要的。通过对局域网络通信的学习研究,本文介绍了局域网通信和实现聊天器基本通信功能的流程,并编写了一

2、个基于 winsock 的局域网络聊天器系统。本系统是运行于mfc 平台上的 winsock 局域网聊天软件,该聊天软件采用 c/s 结构,包括服务器和客户端两个模块,客户端通过服务端进行通信。服务器模块主要实现了服务器的配置和数据的传递;客户端模块主要实现了用户注册、登录、文字聊天和文件传送等功能。该软件采用多线程技术支持多用户操作,并采用相关技术进行了优化,加快了文字传递速度。主要用到了 winsock 编程技术、tcp/ip 协议、多线程技术、数据库存取技术和各种控件编程技术。本文主要分为六个章节,第一章概括的说明聊天器的背景及应用。第二章阐述实现局域网络聊天器系统所用到的主要技术。第三

3、章根据聊天器的设计实现进行需求分析。第四章详细描述了本系统各个模块的设计。第五章重点介绍各个模块的实现和测试。第六章是结束语,总结毕业设计中遇到的问题和自己的收获,感谢给予指导和帮组的老师和同学。关键词:局域网;tcp/ip 协议;winsock;多线程abstractiiabstractwith the computer science and the rapid development of internet, online chat has become a way of mutual exchange of one, and e-mail, phone calls with real-

4、time chat services and more effective. online chat software, a wide variety, such as qq, oicq, msn and so on, to achieve anytime, anywhere access to chat, to bring a great convenience. but the lack of chat software, there are the following: the user must be connected to internet; users to work easil

5、y addicted to online chat. to facilitate the exchange of information within business units to avoid the use of internal staff and other software like qq leaked internal information to reduce unnecessary waste of financial and human resources to develop a lan chat software is very necessary. through

6、the study of local area network communication, this article describes the communication and implementation of local area network chat basic communication process device, and write a winsock-based local area network chat control system. the system is running on the platform at the mfc winsock lan cha

7、t software, chat software with the c / s structure, including both server and client modules, the client side to communicate through the service. server module main achievement of the servers configuration and data transfer; client module main achievement of the user registration, login, text chat a

8、nd other functions. the software supports multi-threading multi-user operation, and optimized use of relevant technologies, accelerate the transmission speed of text. mainly used the winsock programming, tcp / ip protocol, multi-threading, database access technology, and various control programming.

9、 this paper is divided into six chapters, the first chapter general description of the background of chat devices and applications. the second chapter to achieve local area network chat system used in the main control technology. chapter iii device under the design and implementation needs analysis

10、chat. the fourth chapter describes in detail the design of the various modules of the system. chapter v focuses on the implementation and abstractiiitesting of each module. chapter vi is the conclusion, summarizes the problems encountered in the design school and their own harvest for guidance and h

11、elp teachers and students groups.key words: lan; tcp / ip protocol; winsock; multi-threaded目录目 录摘 要.iabstract.ii1 绪论 .11.1 背景知识 .11.2 国内外聊天器系统研究现状 .11.3 选题的目的及意义 .31.4 本课题研究内容 .31.5 本章小结 .42 实现原理及开发环境.52.1microsoft office access.52.2 套接字(socket) .62.2.1 windows socket 介绍(winsock).82.2.2 socket 的同步和异

12、步方式.92.2.3 用 socket 开发一个 server-client 模型的程序 .102.3 多线程技术 .112.4tcp/ip 协议、udp 协议.122.4.1 面向连接的 tcp.132.4.2 面向非连接的 udp 协议 .142.5client/server结构(客户机/服务器模式).152.6 编程环境 .172.6.1 硬件环境 .172.6.2 软件环境 .172.6.3 开发工具介绍 .172.7 本章小结 .183 需求分析.193.1 需求分析 .203.1.1 可行性分析 .203.2.2 系统性能需求 .203.1.3 系统运行需求 .213.2 数据流图

13、 .21目录3.2.1 顶层数据流图 .213.2.2 一层数据流图 .213.2.3 二层数据流图 .223.3 本章小结 .214 系统设计.234.1 系统实现原理 .234.2 c/s 架构设计.244.3 模块设计 .264.3.1 系统流程图 .264.3.1.1 系统总体流程图 .264.3.1.2 系统客户端流程图.274.3.2 数据库设计 .274.4 界面效果 .284.5 本章小结 .295 系统实现及测试.305.1 服务端 .305.1.1 自动配置数据源 .305.1.2 定义服务端的关键结构体 .315.1.2.1 用户信息的结构体 .315.1.2.2 在线用

14、户结构体 .315.1.2.3 socket 信息结构体.325.1.3 启动 winsocket2.325.1.4 调用两个 winapi 函数 .335.1.4.1 接收 client 连接的 winapi 函数.335.1.4.2 线程操作处理 winapi 函数 .365.1.5 模块功能实现(代码略) .395.1.6 模块界面 .395.2 客户端 .405.2.1 登录模块 .405.2.2 注册模块 .425.2.3 文字聊天模块 .445.2.3.1 发送消息: .445.2.3.2 连接信息服务器 .45目录5.2.3.3 接收消息 .475.2.4 文件传送 .485.2

15、.4.1 发送文件 .485.2.4.2 接收文件 .505.3 系统测试 .515.3.1 测试环境 .525.3.2 测试原则 .525.3.3 测试方法及结果 .525.4 本章小结 .56结论.57致谢.58参考文献 .59河北工程大学毕业设计论文11 绪论1.1 背景知识近年来,随着全球信息化进程的不断发展,网络也在飞速发展。出于高效、快速地处理各种事务的目的,越来越多的企业在其内部使用局域网来进行工作。在内部局域网的帮助下,企业得以简化信息流程,提高信息交换的速度,从而提高工作效率。然而,随着企业规模的扩大,业务量的增加,企业内部的信息越来越私密,企业只希望员工通过内部局域网进行沟

16、通与交流,避免企业内部机密通过 internet 泄露到外部。为了解决上述矛盾,人们提出了开发局域网聊天软件的构想,通过局域网聊天软件,企业员工可以随时的进行即时消息传递,召开网络会议等,有利于提高工作消息效率,同时又保护了企业内部信息的安全性。 本系统采用基于 socket 的局域网通信工具的设计与实现的方法。基于 socket 的局域网通信软件可以为企业原有的局域网提供一种良好,安全,快速的通信机制。它的实现无需对企业原有的局域网硬件进行任何改动,具有实现成本低廉的优点,它的使用能有效地降低局域网通信负荷,提高局域网的使用效率,可以很好地解决企业内部局域网的各种通信需求。 基于 socke

17、t 的局域网聊天工具很好地诠释了 socket 通信的原理,并且在企业内部通信、教学、讨论等应用中都具有一定的实用价值。它具有信息收发速度快,保密性好,占用网络带宽资源低,占用服务器吞吐能力低,易于编程实现等优点。基于 socket 的局域网通信软件应用范围广阔,不但可以处理传统的通信需求,而且也能扩展以适应新型的网络应用,如网络教育,数据影音传输等,拥有广泛的应用前景。1.2 国内外聊天器系统研究现状目前国内外做聊天系统的公司很多,产品也琳琅满目,国内有诸如腾讯 qq、新浪 uc、网易泡泡等,国外有著名的 msn(新版改名为 live messenger)以及跨平台 gaim 等。本人取最具

18、代表性的 qq 和 msn 进行了一些研究,作为我开发聊天系统的准备。腾讯无疑是国内即时通讯市场的霸主,自从 99 年进入即时通讯领域并迅速占据市场之后,其在国内用户数量始终高居榜首,即使近几年面对微软 msn 的强大攻势,腾讯 qq 的市场占有率依然稳步增长。腾讯的成功与其对 qq 的不断创新和完河北工程大学毕业设计论文2善是分不开的。参考了许多网络上的资料,以及自己通过观察腾讯 qq 运行时的各种细节。可以确定腾讯 qq 是以多服务器提供服务、服务器总控客户端、客户端之间 udp 直连通信的。并且在两个客户端之间不能建立直连的情况下,才由服务器进行中转通信。其模型如图 1-1:图 1-1

19、腾讯 qq 服务器-客户端模型 1与腾讯 qq 不同,微软的 msn messenger 只使用了 tcp 作为传输层通信协议,所有客户端与服务器进行连接,然后通过与服务器的 tcp 连接进行中转通信。其模型如图 1-2:河北工程大学毕业设计论文3图 1-2 msn 服务器-客户端模型 2腾讯使用的模型中,服务器主要处理客户端各种状态的控制,可以极大减轻服务器的处理压力,但其内部协议和实现复杂度都较高。而 msn messenger 所有数据都要经过服务器,服务器压力可想而知(这就是平时很少见到使用 msn 进行语音视频聊天的原因) 。综合腾讯 qq 和微软 msn messenger 的特点

20、,我打算在我的系统中尝试建立其类似腾讯 qq 的服务器-客户端模型,但以单服务器提供服务。1.3 选题的目的及意义随着计算机科学和 internet 的飞速发展,网上聊天已成为人们相互交流的一中方式,与 e-mail、电话相比,聊天服务更具有实时性和有效性。网络版的聊天软件种类繁多,如 qq、oicq、msn 等,实现随时随地上网聊天,给人们带来了很大的方便。但是这些聊天软件也存在以下不足:用户必须连接 internet;用户在工作时容易沉迷于网络聊天。为了方便单位企业内部的信息交流,避免企业内部员工使用类似qq 等软件泄露内部信息,减少不必要的财力和人力资源浪费,开发一个局域网聊天软件是非常

21、必要的。1.4 本课题研究内容本文主要阐述了基于 mfc 的多功能局域网聊天器系统的设计、开发和实现,分别对系统的需求分析、系统设计、系统实现和系统测试等几个方面进行阐述,具体内容如下:(1) 本系统是基于 c/s 模式开发的基于 mfc 的多功能局域网聊天器系统,server 端实时传送 client 端传送的信息;client 端实现用户界面操作;(2) server 端设定网络通信 ip 段,client 端绑定一个端口号;(3) server 端完成注册,修改用户信息,查看用户信息,文字传输,文件传送实时通讯功能;(4) server 端具有实时显示用户活动状态;(5) client

22、端具有登录模块,增强系统安全性;(6) client 端具有用户注册模块,方便用户具有独立的帐号;(7) client 端具有点对点文字聊天功能,确保通信方便和隐私性;(8) client 端具有文件传送功能,方便局域网内用户文件互相查阅或使用。河北工程大学毕业设计论文41.5 本章小结本章介绍了局域网聊天器的相关背景知识,国内外的研究现状,本课题的目的及意义,简单的介绍了相关技术的原理,在最后简单的描述了局域网聊天系统的主要功能。河北工程大学毕业设计论文52 实现原理及开发环境2.1 microsoft office accessmicrosoft office access(前名 micr

23、osoft access)是由微软发布的关联式数据库管理系统。它结合了 microsoft jet database engine 和 图形用户界面两项特点,是 microsoft office 的成员之一。另外,access 还是 c 语言的一个函数名和一种交换机的主干道模式。导入导出报表的生成程序,当时有能力和到这项任务的复杂报告创造,没有另一受欢迎数据库报表程序的生成程序充满特色和强有力-水晶报告。msde(微软公司sql 服务器桌面发动机)2000,袖珍版本的 mssql 服务器 2000,被包括开发版的办公室 xp 并且被用于进入可能作为除之外的另一种选择 jet 数据库引擎。 自从

24、 ms access 2000 (jet 4.0),开发人员可以在查询中设定参数,这跟预存程序很相似的,但这些“预存程序”只能处理一个程序当资料表内数据发生变化时,它确实允许形式包含被引发的代码,使用是普通的透过查询和其他技术在进入营运储存的程序在方面 rdbms 支援这些的。access 的优点:(1) 存储方式简单,易于维护管理 access 管理的对象有表、查询、窗体、报表、页、宏和模块,以上对象都存放在后缀为(.mdb 或.accdb)的数据库文件 中,便于用户的操作和管理。 (2) 面向对象 access 是一个面向对象的开发工具,利用面向对象的方式将数据库系统中的各种功能对象化,将

25、数据库管理 的各种功能封装在各类对象中。它将一个应用系统当作是由一系列对象组成的,对每个对象它都定义一组方法和属性,以定义该对象的行为和用法,用户还可以按需要给对象扩展方法和属性。通过对象的方法、属性完成数据库的操作和管理,极大地简化了用户的开发工作。同时,这种基于面向对象的开发方式,使得开发应用程序更为简便。 (3) 界面友好、易操作 access 是一个可视化工具,风格与 windows 完全一样,用户想要生成对象并应用,只要使用鼠标进行拖放即可,非常直观方便。系统还提供了表生成器、查询生成器、报表设计器以及数据库向导、表向导、查询向导、窗体向导、报表向导等工具,使得操作简便,容易使用和掌

26、握。 河北工程大学毕业设计论文6(4) 集成环境、处理多种数据信息 access 基于 windows 操作系统下的集成开发环境,该环境集成了各种向导和生成器工具,极大地提高了开发人员的工作效率,使得建立数据库、创建表、设计用户界面、设计数据查询、报表打印等可以方便有序地进行。 (5) access 支持 odbc(开发数据库互连,open data base connectivity) ,利用access 强大的 dde(动态数据交换 )和 ole(对象的联接和嵌入)特性,可以在一个数据表中嵌入位图、声音、excel 表格、word 文档,还可以建立动态的数据库报表和窗体等。access 还

27、可以将程序应用于网络,并与网络上的动态数据相联接。利用数据库访问页对象生成 html 文件,轻松构建 internet/intranet 的应用。 (6) 支持广泛,易于扩展,弹性较大 能够将通过链接表的方式来打开 excel 文件、格式化文本文件等,这样就可以利用数据库的高效率对其中的数据进行查询、处理。还可以通过以 access 作为前台客户端,以 sql server 作为后台数据库 的方式(如 adp)开发大型数据库应用系统。 总之,access 是一个既可以只用来存放数据的数据库,也可以作为一个客户端开发工具来进行数据库应用系统开发 ;即可以开发方便易用的小型软件,也可以用来开发大型

28、的应用系统。access 的缺点:access 是小型数据库,既然是小型就有它的局限性(下面关于性能方面的缺点仅指用 access 作为数据库的情况下,不包括用 access 作为客户端前台,用 sql server 作为后台数据库的情况): (1).数据库过大,一般百 m 以上(纯数据,不包括窗体、报表等客户端对象)性能会变差。 (2).虽然理论上支持 255 个并发用户,但实际上根本支持不了那么多,如果以只读方式访问大概在 100 个用户左右,而如果是并发编辑,则大概在 10-20 个用户。 (3).记录数过多,单表记录数过百万性能就会变得较差,如果加上设计不良,这个限度还要降低。 不能编

29、译成可执行文件(.exe),必须要安装 access 运行环境才能使用。2.2套接字(socket)套接字(socket)是通信的基石,是支持 tcp/ip 协议的网络通信的基本操作单元。可以将套接字看作不同主机间的进程进行双向通信的端点,它构成了单个主机河北工程大学毕业设计论文7内及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念。套接字通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序) 。各种进程使用这个相同的域互相之间用 internet 协议簇来进行通信。套接字可以根据通信性质分类,这种性

30、质对于用户是可见的。应用程序一般仅在同一类的套接字间进行通信。不过只要底层的通信协议允许,不同类型的套接字间也 照样可以通信。套接字有三种不同的类型:流套接字、数据报套接字和原始套接字。流套接字(sock_stream):流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即 tcp(the transmission control protocol)协议。 数据报套接字(sock_dgram):数据报套接字提供了一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能

31、在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据报套接字使用 udp(user datagram protocol)协议进行数据的传输。由于数据包套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。 原始套接字(sock_raw):原始套接字与标准套接字(标准套接字指的是前面介绍的流套接字和数据报套接字)的区别在于:原始套接字可以读写内核没有处理的 ip 数据包,而流套接字只能读取 tcp 协议的数据,数据报套接字只能读取udp 协议的数据。因此,如果要访问其他协议发送数据必须使用原始套接字。套接字的工作原理可以简单描述:要通过互联网进行通信

32、,你至少需要一对套接字,其中一个运行于客户机端,我们称之为 clientsocket,另一个运行于服务器端,我们称之为 serversocket。根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。所谓服务器监听,是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。所谓客户端请求,是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。所谓连接确认,是指当服务

33、器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的河北工程大学毕业设计论文8描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。以上过程可以通过图 2-1 来描述:服务器客户端监听状态连接请求发送服务端scoket描述确认服务端socket描述图 2-1 socket 建立过程2.2.1 windows socket 介绍(winsock)以 u.c. berkeley 大学 bsd unix 中流行的 socket 接口为范例定义了一套microsoft

34、 windows 下网络编程接口。它不仅包含了人们所熟悉的 berkeley socket 风格的库函数;也包含了一组针对 windows 的扩展库函数,以使程序员能充分地利用windows 消息驱动机制 进行编程。windows sockets 规范本意在于提供给应用程序开发者一套简单的 api,并让各家网络软件供应商共同遵守。此外,在一个特定版本 windows 的基础上,windows sockets 也定义了一个二进制接口(abi) ,以此来保证应用 windows sockets api 的应用程序能够在任何网络软件供应商的符合windows sockets 协议的实现上工作。因此这

35、份规范定义了应用程序开发者能够使用,并且网络软件供应商能够实现的一套库函数调用和相关语义。遵守这套 windows sockets 规范的网络软件,我们称之为 windows sockets 兼容的,而 windows sockets兼容实现的提供者,我们称之为 windows sockets 提供者。一个网络软件供应商必须百分之百地实现 windows sockets 规范才能做到现 windows sockets 兼容。任何能够与 windows sockets 兼容实现协同工作的应用程序就被认为是具有 windows sockets 接口。我们称这种应用程序为 windows socke

36、ts 应用程序。windows sockets规范定义并记录了如何使用 api 与 internet 协议族(ips,通常我们指的是tcp/ip)连接,尤其要指出的是所有的 windows sockets 实现都支持流套接口和数据报套接口,应用程序调用 windows sockets 的 api 实现相互之间的通讯。windows sockets 又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯河北工程大学毕业设计论文9工作。选定 windows 平台开发网络通信程序,可以选择 windows 的 sockets编程接口,windows sockets 是一套开放的、支持多种协议的 w

37、indows 下的网络编程接口。现在的 winsock 已经基本上实现了与协议无关,你可以使用 winsock 来调用多种协议的功能,但较常使用的是 tcp/ip 协议。windows sockets 无疑是我们进行网络编程的利器。所有的 windows sockets 实现都支持流套接口和数据报套接口。应用程序调用 windows sockets 的 api 实现相互之间的通讯。windows sockets 又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。它们之间的关系如图 2-2 所示: 应用程序1应用程序2网络编程界面,例如windows sockets网络通讯协议服务界

38、面,例如tcp/ip物理通讯介质操作系统,例如windowsxp图 2-2 windows sockets 实现通讯工作的各层关系图2.2.2 socket 的同步和异步方式所谓 socket 通常也称作套接字,应用程序通常通过套接字向网络发出请求河北工程大学毕业设计论文10或者应答网络请求。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。所谓 socket 的同步方式,就是发送方发送数据包以后,不等待接收方响应,就接着发送下一个数据包。socket 的异步方式,就是当发送方发送一个数据包以后,一直等到接收方响应后,才接着发送下一个数据包。关于套接字

39、还有阻塞和非阻塞之分:阻塞套接字是指执行此套接字的网络调用时,直到调用成功才返回,否则此套接字就一直阻塞在网络调用上。而非阻塞套接字是指在执行此套接字的网络调用时,不管成功与否,都立即返回。在 windows 网络通信软件的开发中,最常用的方法就是异步非阻塞套接字。2.2.3 用 socket 开发一个 server-client 模型的程序开发原理: 服务器,使用 serversocket 监听指定的端口,端口可以随意指定(由于 1024 以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于 1024 的端口),等待客户连接请求,客户连接后,会话产生;在退出客户端后,

40、关闭连接。客户端,使用 socket 对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,连接成功;客户端退出后,关闭 socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个 1024 以上的端口。socket 接口是 tcp/ip 网络的 api,socket 接口定义了许多函数或例程,程序员可以用它们来开发 tcp/ip 网络上的应用程序。要学 internet 上的 tcp/ip 网络编程,必须理解 socket 接口。网络的 socket 数据传输是一种特殊的 i/o,socket 也是一种文件描述符。socket 也具有一个类似于打开文件的函数调用 socket

41、(),该函数返回一个整型的 socket 描述符,随后的连接建立、数据传输等操作都是通过该 socket 实现的。常用的 socket 类型有两种:流式 socket(sock_stream)和数据报式socket(sock_dgram)。流式是一种面向连接的 socket,针对于面向连接的tcp 服务应用;数据报式 socket 是一种无连接的 socket,对应于无连接的 udp 服务应用。为了建立 socket,程序可以调用 socket 函数,该函数返回一个类似于文件描述符的句柄。socket 函数原型为:int socket(int domain, int type, int pro

42、tocol);domain指明所使用的协议族,通常为 af_inet,表示互联网协议族(tcp/ip 协议族);type 参数指定 socket 的类型:sock_stream 或 sock_dgram,socket 接口还定义了原始 socket(sock_raw),允许程序使用低层协议;protocol 通常赋值河北工程大学毕业设计论文110。socket()调用返回一个整型 socket 描述符,你可以在后面的调用使用它。socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用 socket 函数时,socket 执行体将建立一个 socket,实际上建立一个 socke

43、t意味着为一个 socket 数据结构分配存储空间。 socket 执行体为你管理描述符表。两个网络程序之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。socket 数据结构中包含这五种信息。socket 在测量软件中的使用也很广泛。2.3多线程技术cpu 生产商为了提高 cpu 的性能,通常做法是提高 cpu 的时钟频率和增加缓存容量。不过目前 cpu 的频率越来越快,如果再通过提升 cpu 频率和增加缓存的方法来提高性能,往往会受到制造工艺上的限制以及成本过高的制约。尽管提高 cpu 的时钟频率和增加缓存容量后的确可以改善性能,但这样的cp

44、u 性能提高在技术上存在较大的难度。实际上在应用中基于很多原因,cpu 的执行单元都没有被充分使用。如果 cpu 不能正常读取数据(总线/内存的瓶颈),其执行单元利用率会明显下降。另外就是目前大多数执行线程缺乏 ilp(instruction-level parallelism,多种指令同时执行)支持。这些都造成了目前 cpu 的性能没有得到全部的发挥。因此,intel 则采用另一个思路去提高 cpu 的性能,让 cpu 可以同时执行多重线程,就能够让 cpu 发挥更大效率,即所谓“超线程(hyper-threading,简称“ht”)”技术。超线程技术就是利用特殊的硬件指令,把两个逻辑内核模

45、拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了 cpu 的闲置时间,提高的 cpu 的运行效率。采用超线程即是可在同一时间里,应用程序可以使用芯片的不同部分。虽然单线程芯片每秒钟能够处理成千上万条指令,但是在任一时刻只能够对一条指令进行操作。而超线程技术可以使芯片同时进行多线程处理,使芯片性能得到提升。超线程技术是在一颗 cpu 同时执行多个程序而共同分享一颗 cpu 内的资源,理论上要像两颗 cpu 一样在同一时间执行两个线程,p4 处理器需要多加入一个logical cpu pointer(逻辑处理单元)。因此新一代的 p4 ht 的 die 的

46、面积比以往的p4 增大了 5%。而其余部分如 alu(整数运算单元)、fpu(浮点运算单元)、l2 cache(二级缓存)则保持不变,这些部分是被分享的。虽然采用超线程技术能同时执行两个线程,但它并不象两个真正的 cpu 那样,每个 cpu 都具有独立的资源。当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续。因此超线程的性能并不等于河北工程大学毕业设计论文12两颗 cpu 的性能。英特尔 p4 超线程有两个运行模式,single task mode(单任务模式)及 multi task mode(多任务模式),当程序不支持 multi-process

47、ing(多处理器作业)时,系统会停止其中一个逻辑 cpu 的运行,把资源集中于单个逻辑 cpu 中,让单线程程序不会因其中一个逻辑 cpu 闲置而减低性能,但由于被停止运行的逻辑 cpu 还是会等待工作,占用一定的资源,因此 hyper-threading cpu 运行 single task mode程序模式时,有可能达不到不带超线程功能的 cpu 性能,但性能差距不会太大。也就是说,当运行单线程运用软件时,超线程技术甚至会降低系统性能,尤其在多线程操作系统运行单线程软件时容易出现此问题。在计算机编程中,一个基本的概念就是同时对多个任务加以控制。许多程序设计问题都要求程序能够停下手头的工作,

48、改为处理其他一些问题,再返回主进程。可以通过多种途径达到这个目的。最开始的时候,那些掌握机器低级语言的程序员编写一些“中断服务例程”,主进程的暂停是通过硬件级的中断实现的。尽管这是一种有用的方法,但编出的程序很难移植,由此造成了另一类的代价高昂问题。中断对那些实时性很强的任务来说是很有必要的。但对于其他许多问题,只要求将问题划分进入独立运行的程序片断中,使整个程序能更迅速地响应用户的请求。多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。多线程在构建大型系统的时候是需要重点关注的一个重要方面,特别是在效率

49、(系统跑得多快)和性能(系统工作正常)之间做一个权衡的时候。恰当的使用多线程可以极大的提高系统性能。使用多线程的好处有以下几点:使用线程可以把占据长时间的程序中的任务放到后台去处理;用户界面可以更加吸引人,这样比如用户在点击了一个按钮去触发某些时间的处理,可以弹出一个进度条显示处理的进度;程序的运行速度可能加快;在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了,在这种情况下我们可以释放一些珍贵的资源如内存占用等。2.4 tcp/ip 协议、udp 协议网际协议 ip 是 tcp/ip 的心脏,也是网络层中最重要的协议。ip 层接收由更低层(网络接口层例如以太网设备驱

50、动程序)发来的数据包,并河北工程大学毕业设计论文13把该数据包发送到更高层-tcp 或 udp 层;相反,ip 层也把从 tcp 或 udp 层接收来的数据包传送到更低层。ip 数据包是不可靠的,因为 ip 并没有做任何事情来确认数据包是否按顺序发送的或者被破坏。ip 数据包中含有发送它的主机地址(源地址)和接收它的主机的地址(目的地址) 。如果 ip 数据包中有已经封好的 tcp 数据包,那么 ip 将把他们向上 传送到tcp 层。tcp 将包排序并进行错误检查,同时实现虚电路间的连接。tcp 数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。udp 与 tcp

51、 位于同一层,但对于数据包的顺序错误或重发。因此,udp 不被应用于那些使用虚电路的面向连接的服务 udp 主要用于那些面向查询-应答的服务。tcp 和 udp 服务通常有一个客户/服务器的关系。两个系统间的多重连接是这样相互确认并协调一致的,tcp 或 udp 连接唯一地使用每个信息中的如下四项进行确认:表 2-1源 ip 地址发送包的 ip 地址目的 ip 地址接收包的 ip 地址源端口源系统上的连接的端口目的端口目的系统上的连接的端口端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口对应一个 16 比特的数。服务进程通常使用一个固定的端口,例如,smtp 使用 25。这

52、些端口号是“广为人知”的,因为在建立与特定的主机或服务的连接时,需要这些地址和目的地址进行通讯。2.4.1 面向连接的 tcp“面向连接”就是在正式通信前必须要与对方建立起连接。比如你给别人打电话,必须等线路接通了、对方拿起话筒才能相互通话。 tcp(transmission control protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个 tcp 连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:主机 a 向河北工程大学毕业设计论

53、文14主机 b 发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机 b 向主机 a 发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机a 再发出一个数据包确认主机 b 的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机 a 才向主机 b 正式发送数据。tcp 协议能为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差错地发往网络上的其他计算机,对可靠性要求高的数据通信系统往往使用 tcp 协议传输数据。图 2-3

54、 本地连接 tcp我们来做一个实验,用计算机 a(安装 windows 2000 server 操作系统)从“网上邻居”上的一台计算机 b 拷贝大小为 8,644,608 字节的文件,通过状态栏右下角网卡的发送和接收指标就会发现:虽然是数据流是由计算机 b 流向计算机 a,但是计算机 a 仍发送了 3,456 个数据包,如上图所示。这些数据包是怎样产生的呢?因为文件传输时使用了 tcp/ip 协议,更确切地说是使用了面向连接的 tcp 协议,计算机 a 接收数据包的时候,要向计算机 b 回发数据包,所以也产生了一些通信量。图 2-4 网络统计 如果事先用网络监视器监视网络流量,就会发现由此产生

55、的数据流量是9,478,819 字节,比文件大小多出 10.96%(如上图所示),原因不仅在于数据包和帧河北工程大学毕业设计论文15本身占用了一些空间,而且也在于 tcp 协议面向连接的特性导致了一些额外的通信量的产生。2.4.2 面向非连接的 udp 协议“面向非连接”就是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。这与现在风行的手机短信非常相似:你在发短信的时候,只需要输入对方手机号就 ok 了。 udp(user data protocol,用户数据报协议)是与 tcp 相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!图 2-5 本地连接

56、 udpudp 适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命令来测试两台主机之间 tcp/ip 通信是否正常,其实“ping”命令的原理就是向对方主机发送 udp 数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。例如,在默认状态下,一次“ping”操作发送 4 个数据包(如上图所示)。大家可以看到,发送的数据包数量是 4 包,收到的也是 4 包(因为对方主机收到后会发回一个确认收到的数据包)。这充分说明了 udp 协议是面向非连接的协议,没有建立连接的过程。正因为 udp协议没有连接的过程,所以它的通信效果高

57、;但也正因为如此,它的可靠性不如tcp 协议高。qq 就使用 udp 发消息,因此有时会出现收不到消息的情况。2.5 client/server 结构(客户机/服务器模式)client/server 结构(c/s 结构)是大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到 client 端和 server 端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是client/server 形式的两层结构,由于现在的软件应用系统正在向分布式的 web 应用河北工程大学毕业设计论文16发展,web 和 client/server 应用都可以

58、进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。c/s 结构的优点是能充分发挥客户端 pc 的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快。缺点主要有以下几个:(1).只适用于局域网。而随着互联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。 (2).客户端需要安装专用的客户端软件。首先涉及到安装的工作量,其次任何一台电

59、脑出问题,如病毒、硬件损坏,都需要进行安装或维护。还有,系统软件升级时,每一台客户机需要重新安装,其维护和升级成本非常高。 (3).对客户端的操作系统一般也会有限制。可能适应于 win2000 或 windows xp,但不能用于 windows7。或者不适用于微软新的操作系统等等,更不用说linux、unix 等。c/s 架构软件的优势与劣势:(1)应用服务器运行数据负荷较轻。最简单的 c/s 体系结构的数据库应用由两部分组成,即客户应用程序和数据库服务器程序。二者可分别称为前台程序与后台程序。运行数据库服务器程序的机器,也称为应用服务器。一旦服务器程序被启动,就随时等待响应客户程序发来的请

60、求;客户应用程序运行在用户自己的电脑上,对应于数据库服务器,可称为客户电脑,当需要对数据库中的数据进行任何操作时,客户程序就自动地寻找服务器程序,并向其发出请求,服务器程序根据预定的规则作出应答,送回结果,应用服务器运行数据负荷较轻。(2)数据的储存管理功能较为透明。在数据库应用中,数据的储存管理功能,是由服务器程序和客户应用程序分别独立进行的,前台应用可以违反的规则,并且通常把那些不同的(不管是已知还是未知的)运行数据,在服务器程序中不集中实现,例如访问者的权限,编号可以重复、必须有客户才能建立定单这样的规则。所有这些,对于工作在前台程序上的最终用户,是“透明”的,他们无须过问(通常也无法干

温馨提示

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

评论

0/150

提交评论