




已阅读5页,还剩60页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 i 摘 要 随着计算机科学和 internet 的飞速发展,网上聊天已成为人们相互交流的一中方式, 与 e-mail、电话相比,聊天服务更具有实时性和有效性。网络版的聊天软件种类繁多, 如 qq、oicq、msn 等,实现随时随地上网聊天,给人们带来了很大的方便。但是这 些聊天软件也存在以下不足:用户必须连接 internet;用户在工作时容易沉迷于网络聊 天。为了方便单位企业内部的信息交流,避免企业内部员工使用类似 qq 等软件泄露 内部信息,减少不必要的财力和人力资源浪费,开发一个局域网聊天软件是非常必要 的。 通过对局域网络通信的学习研究,本文介绍了局域网通信和实现聊天器基本通信 功能的流程,并编写了一个基于 winsock 的局域网络聊天器系统。本系统是运行于 mfc 平台上的 winsock 局域网聊天软件,该聊天软件采用 c/s 结构,包括服务器和客 户端两个模块,客户端通过服务端进行通信。服务器模块主要实现了服务器的配置和 数据的传递;客户端模块主要实现了用户注册、登录、文字聊天和文件传送等功能。 该软件采用多线程技术支持多用户操作,并采用相关技术进行了优化,加快了文字传 递速度。主要用到了 winsock 编程技术、tcp/ip 协议、多线程技术、数据库存取技术 和各种控件编程技术。 本文主要分为六个章节,第一章概括的说明聊天器的背景及应用。第二章阐述实 现局域网络聊天器系统所用到的主要技术。第三章根据聊天器的设计实现进行需求分 析。第四章详细描述了本系统各个模块的设计。第五章重点介绍各个模块的实现和测 试。第六章是结束语,总结毕业设计中遇到的问题和自己的收获,感谢给予指导和帮 组的老师和同学。 关键词:局域网;tcp/ip 协议;winsock;多线程 abstract ii abstract with 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-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 easily 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 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 chat 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 and 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. 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 chat. the fourth chapter describes in detail the design of the various modules of the system. chapter v focuses on the implementation and abstract iii testing of each module. chapter vi is the conclusion, summarizes the problems encountered in the design school and their own harvest for guidance and help teachers and students groups. key words: lan; tcp / ip protocol; winsock; multi-threaded 目录 目 录 摘 要i abstract.ii 1 绪论 1 1.1 背景知识 1 1.2 国内外聊天器系统研究现状 1 1.3 选题的目的及意义 3 1.4 本课题研究内容 3 1.5 本章小结 4 2 实现原理及开发环境5 2.1microsoft office access5 2.2 套接字(socket) 6 2.2.1 windows socket 介绍(winsock)8 2.2.2 socket 的同步和异步方式.9 2.2.3 用 socket 开发一个 server-client 模型的程序 .10 2.3 多线程技术 .11 2.4tcp/ip 协议、udp 协议12 2.4.1 面向连接的 tcp13 2.4.2 面向非连接的 udp 协议 .14 2.5client/server结构(客户机/服务器模式)15 2.6 编程环境 .17 2.6.1 硬件环境 .17 2.6.2 软件环境 .17 2.6.3 开发工具介绍 .17 2.7 本章小结 .18 3 需求分析.19 3.1 需求分析 .20 3.1.1 可行性分析 .20 3.2.2 系统性能需求 .20 3.1.3 系统运行需求 .21 3.2 数据流图 .21 目录 3.2.1 顶层数据流图 .21 3.2.2 一层数据流图 .21 3.2.3 二层数据流图 .22 3.3 本章小结 .21 4 系统设计.23 4.1 系统实现原理 .23 4.2 c/s 架构设计.24 4.3 模块设计 .26 4.3.1 系统流程图 .26 4.3.1.1 系统总体流程图 .26 4.3.1.2 系统客户端流程图27 4.3.2 数据库设计 .27 4.4 界面效果 .28 4.5 本章小结 .29 5 系统实现及测试.30 5.1 服务端 .30 5.1.1 自动配置数据源 .30 5.1.2 定义服务端的关键结构体 .31 5.1.2.1 用户信息的结构体 .31 5.1.2.2 在线用户结构体 .31 5.1.2.3 socket 信息结构体.32 5.1.3 启动 winsocket2.32 5.1.4 调用两个 winapi 函数 33 5.1.4.1 接收 client 连接的 winapi 函数33 5.1.4.2 线程操作处理 winapi 函数 .36 5.1.5 模块功能实现(代码略) .39 5.1.6 模块界面 .39 5.2 客户端 .40 5.2.1 登录模块 .40 5.2.2 注册模块 .42 5.2.3 文字聊天模块 .44 5.2.3.1 发送消息: .44 5.2.3.2 连接信息服务器 .45 目录 5.2.3.3 接收消息 .47 5.2.4 文件传送 .48 5.2.4.1 发送文件 .48 5.2.4.2 接收文件 .50 5.3 系统测试 .51 5.3.1 测试环境 52 5.3.2 测试原则 52 5.3.3 测试方法及结果 52 5.4 本章小结 56 结论.57 致谢.58 参考文献 59 河北工程大学毕业设计论文 1 1 绪论 1.1 背景知识 近年来,随着全球信息化进程的不断发展,网络也在飞速发展。出于高效、快 速地处理各种事务的目的,越来越多的企业在其内部使用局域网来进行工作。在内 部局域网的帮助下,企业得以简化信息流程,提高信息交换的速度,从而提高工作 效率。然而,随着企业规模的扩大,业务量的增加,企业内部的信息越来越私密, 企业只希望员工通过内部局域网进行沟通与交流,避免企业内部机密通过 internet 泄 露到外部。为了解决上述矛盾,人们提出了开发局域网聊天软件的构想,通过局域 网聊天软件,企业员工可以随时的进行即时消息传递,召开网络会议等,有利于提 高工作消息效率,同时又保护了企业内部信息的安全性。 本系统采用基于 socket 的局域网通信工具的设计与实现的方法。基于 socket 的 局域网通信软件可以为企业原有的局域网提供一种良好,安全,快速的通信机制。 它的实现无需对企业原有的局域网硬件进行任何改动,具有实现成本低廉的优点, 它的使用能有效地降低局域网通信负荷,提高局域网的使用效率,可以很好地解决 企业内部局域网的各种通信需求。 基于 socket 的局域网聊天工具很好地诠释了 socket 通信的原理,并且在企业内 部通信、教学、讨论等应用中都具有一定的实用价值。它具有信息收发速度快,保 密性好,占用网络带宽资源低,占用服务器吞吐能力低,易于编程实现等优点。 基于 socket 的局域网通信软件应用范围广阔,不但可以处理传统的通信需求, 而且也能扩展以适应新型的网络应用,如网络教育,数据影音传输等,拥有广泛的 应用前景。 1.2 国内外聊天器系统研究现状 目前国内外做聊天系统的公司很多,产品也琳琅满目,国内有诸如腾讯 qq、 新浪 uc、网易泡泡等,国外有著名的 msn(新版改名为 live messenger)以及跨 平台 gaim 等。本人取最具代表性的 qq 和 msn 进行了一些研究,作为我开发聊天 系统的准备。 腾讯无疑是国内即时通讯市场的霸主,自从 99 年进入即时通讯领域并迅速占据 市场之后,其在国内用户数量始终高居榜首,即使近几年面对微软 msn 的强大攻 势,腾讯 qq 的市场占有率依然稳步增长。腾讯的成功与其对 qq 的不断创新和完 河北工程大学毕业设计论文 2 善是分不开的。 参考了许多网络上的资料,以及自己通过观察腾讯 qq 运行时的各种细节。可 以确定腾讯 qq 是以多服务器提供服务、服务器总控客户端、客户端之间 udp 直连 通信的。并且在两个客户端之间不能建立直连的情况下,才由服务器进行中转通信。 其模型如图 1-1: 图 1-1 腾讯 qq 服务器-客户端模型 1 与腾讯 qq 不同,微软的 msn messenger 只使用了 tcp 作为传输层通信协议, 所有客户端与服务器进行连接,然后通过与服务器的 tcp 连接进行中转通信。 其模型如图 1-2: 河北工程大学毕业设计论文 3 图 1-2 msn 服务器-客户端模型 2 腾讯使用的模型中,服务器主要处理客户端各种状态的控制,可以极大减轻服 务器的处理压力,但其内部协议和实现复杂度都较高。而 msn messenger 所有数据 都要经过服务器,服务器压力可想而知(这就是平时很少见到使用 msn 进行语音 视频聊天的原因) 。 综合腾讯 qq 和微软 msn messenger 的特点,我打算在我的系统中尝试建立其 类似腾讯 qq 的服务器-客户端模型,但以单服务器提供服务。 1.3 选题的目的及意义 随着计算机科学和 internet 的飞速发展,网上聊天已成为人们相互交流的一中方 式,与 e-mail、电话相比,聊天服务更具有实时性和有效性。网络版的聊天软件种 类繁多,如 qq、oicq、msn 等,实现随时随地上网聊天,给人们带来了很大的方 便。但是这些聊天软件也存在以下不足:用户必须连接 internet;用户在工作时容易 沉迷于网络聊天。为了方便单位企业内部的信息交流,避免企业内部员工使用类似 qq 等软件泄露内部信息,减少不必要的财力和人力资源浪费,开发一个局域网聊 天软件是非常必要的。 1.4 本课题研究内容 本文主要阐述了基于 mfc 的多功能局域网聊天器系统的设计、开发和实现,分 别对系统的需求分析、系统设计、系统实现和系统测试等几个方面进行阐述,具体 内容如下: (1) 本系统是基于 c/s 模式开发的基于 mfc 的多功能局域网聊天器系统, server 端实时传送 client 端传送的信息;client 端实现用户界面操作; (2) server 端设定网络通信 ip 段,client 端绑定一个端口号; (3) server 端完成注册,修改用户信息,查看用户信息,文字传输,文件传送 实时通讯功能; (4) server 端具有实时显示用户活动状态; (5) client 端具有登录模块,增强系统安全性; (6) client 端具有用户注册模块,方便用户具有独立的帐号; (7) client 端具有点对点文字聊天功能,确保通信方便和隐私性; (8) client 端具有文件传送功能,方便局域网内用户文件互相查阅或使用。 河北工程大学毕业设计论文 4 1.5 本章小结 本章介绍了局域网聊天器的相关背景知识,国内外的研究现状,本课题的目的 及意义,简单的介绍了相关技术的原理,在最后简单的描述了局域网聊天系统的主 要功能。 河北工程大学毕业设计论文 5 2 实现原理及开发环境 2.1 microsoft office access microsoft office access(前名 microsoft access)是由微软发布的关联式数据库 管理系统。它结合了 microsoft jet database engine 和 图形用户界面两项特点,是 microsoft office 的成员之一。另外,access 还是 c 语言的一个函数名和一种交换机 的主干道模式。 导入导出报表的生成程序,当时有能力和到这项任务的复杂报告创造,没有另 一受欢迎数据库报表程序的生成程序充满特色和强有力-水晶报告。msde(微软公司 sql 服务器桌面发动机)2000,袖珍版本的 mssql 服务器 2000,被包括开发版的办 公室 xp 并且被用于进入可能作为除之外的另一种选择 jet 数据库引擎。 自从 ms access 2000 (jet 4.0),开发人员可以在查询中设定参数,这跟预存程序 很相似的,但这些“预存程序”只能处理一个程序当资料表内数据发生变化时,它 确实允许形式包含被引发的代码,使用是普通的透过查询和其他技术在进入营运储 存的程序在方面 rdbms 支援这些的。 access 的优点: (1) 存储方式简单,易于维护管理 access 管理的对象有表、查询、窗体、报表、页、宏和模块,以上对象都存放 在后缀为(.mdb 或.accdb)的数据库文件 中,便于用户的操作和管理。 (2) 面向对象 access 是一个面向对象的开发工具,利用面向对象的方式将数据 库系统中的各种功能对象化,将数据库管理 的各种功能封装在各类对象中。它将一 个应用系统当作是由一系列对象组成的,对每个对象它都定义一组方法和属性,以 定义该对象的行为和用法,用户还可以按需要给对象扩展方法和属性。通过对象的 方法、属性完成数据库的操作和管理,极大地简化了用户的开发工作。同时,这种 基于面向对象的开发方式,使得开发应用程序更为简便。 (3) 界面友好、易操作 access 是一个可视化工具,风格与 windows 完全一样,用户想要生成对象并 应用,只要使用鼠标进行拖放即可,非常直观方便。系统还提供了表生成器、查询 生成器、报表设计器以及数据库向导、表向导、查询向导、窗体向导、报表向导等 工具,使得操作简便,容易使用和掌握。 河北工程大学毕业设计论文 6 (4) 集成环境、处理多种数据信息 access 基于 windows 操作系统下的集成开发环境,该环境集成了各种向导和 生成器工具,极大地提高了开发人员的工作效率,使得建立数据库、创建表、设计 用户界面、设计数据查询、报表打印等可以方便有序地进行。 (5) access 支持 odbc(开发数据库互连,open data base connectivity) ,利用 access 强大的 dde(动态数据交换 )和 ole(对象的联接和嵌入)特性,可以在 一个数据表中嵌入位图、声音、excel 表格、word 文档,还可以建立动态的数据库 报表和窗体等。access 还可以将程序应用于网络,并与网络上的动态数据相联接。 利用数据库访问页对象生成 html 文件,轻松构建 internet/intranet 的应用。 (6) 支持广泛,易于扩展,弹性较大 能够将通过链接表的方式来打开 excel 文件、格式化文本文件等,这样就可 以利用数据库的高效率对其中的数据进行查询、处理。还可以通过以 access 作为前 台客户端,以 sql server 作为后台数据库 的方式(如 adp)开发大型数据库应用 系统。 总之,access 是一个既可以只用来存放数据的数据库,也可以作为一个客户端 开发工具来进行数据库应用系统开发 ;即可以开发方便易用的小型软件,也可以用 来开发大型的应用系统。 access 的缺点: access 是小型数据库,既然是小型就有它的局限性(下面关于性能方面的缺 点仅指用 access 作为数据库的情况下,不包括用 access 作为客户端前台,用 sql server 作为后台数据库的情况): (1).数据库过大,一般百 m 以上(纯数据,不包括窗体、报表等客户端对象) 性能会变差。 (2).虽然理论上支持 255 个并发用户,但实际上根本支持不了那么多,如果以只 读方式访问大概在 100 个用户左右,而如果是并发编辑,则大概在 10-20 个用户。 (3).记录数过多,单表记录数过百万性能就会变得较差,如果加上设计不良,这 个限度还要降低。 不能编译成可执行文件(.exe),必须要安装 access 运行环境才能使用。 2.2套接字(socket) 套接字(socket)是通信的基石,是支持 tcp/ip 协议的网络通信的基本操作单 元。可以将套接字看作不同主机间的进程进行双向通信的端点,它构成了单个主机 河北工程大学毕业设计论文 7 内及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的线 程通过套接字通信而引进的一种抽象概念。套接字通常和同一个域中的套接字交换 数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序) 。各种进程 使用这个相同的域互相之间用 internet 协议簇来进行通信。 套接字可以根据通信性质分类,这种性质对于用户是可见的。应用程序一般仅 在同一类的套接字间进行通信。不过只要底层的通信协议允许,不同类型的套接字 间也 照样可以通信。套接字有三种不同的类型:流套接字、数据报套接字和原始套 接字。 流套接字(sock_stream):流套接字用于提供面向连接、可靠的数据传输 服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流套接字 之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即 tcp(the transmission control protocol)协议。 数据报套接字(sock_dgram):数据报套接字提供了一种无连接的服务。 该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重 复,且无法保证顺序地接收到数据。数据报套接字使用 udp(user datagram protocol)协议进行数据的传输。由于数据包套接字不能保证数据传输的可靠性,对 于有可能出现的数据丢失情况,需要在程序中做相应的处理。 原始套接字(sock_raw):原始套接字与标准套接字(标准套接字指的是前 面介绍的流套接字和数据报套接字)的区别在于:原始套接字可以读写内核没有处 理的 ip 数据包,而流套接字只能读取 tcp 协议的数据,数据报套接字只能读取 udp 协议的数据。因此,如果要访问其他协议发送数据必须使用原始套接字。 套接字的工作原理可以简单描述:要通过互联网进行通信,你至少需要一对套 接字,其中一个运行于客户机端,我们称之为 clientsocket,另一个运行于服务器端, 我们称之为 serversocket。 根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可 以分为三个步骤:服务器监听,客户端请求,连接确认。 所谓服务器监听,是服务器端套接字并不定位具体的客户端套接字,而是处于 等待连接的状态,实时监控网络状态。 所谓客户端请求,是指由客户端的套接字提出连接请求,要连接的目标是服务 器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字, 指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。 所谓连接确认,是指当服务器端套接字监听到或者说接收到客户端套接字的连 接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的 河北工程大学毕业设计论文 8 描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字 继续处于监听状态,继续接收其他客户端套接字的连接请求。 以上过程可以通过图 2-1 来描述: 服务器 客户端 监听状态 连接请求 发送服务端scoket描述 确认服务端socket描述 图 2-1 socket 建立过程 2.2.1 windows socket 介绍(winsock) 以 u.c. berkeley 大学 bsd unix 中流行的 socket 接口为范例定义了一套 microsoft windows 下网络编程接口。它不仅包含了人们所熟悉的 berkeley socket 风 格的库函数;也包含了一组针对 windows 的扩展库函数,以使程序员能充分地利用 windows 消息驱动机制 进行编程。windows sockets 规范本意在于提供给应用程序 开发者一套简单的 api,并让各家网络软件供应商共同遵守。此外,在一个特定版 本 windows 的基础上,windows sockets 也定义了一个二进制接口(abi) ,以此来 保证应用 windows sockets api 的应用程序能够在任何网络软件供应商的符合 windows sockets 协议的实现上工作。因此这份规范定义了应用程序开发者能够使用, 并且网络软件供应商能够实现的一套库函数调用和相关语义。遵守这套 windows sockets 规范的网络软件,我们称之为 windows sockets 兼容的,而 windows sockets 兼容实现的提供者,我们称之为 windows sockets 提供者。一个网络软件供应商必 须百分之百地实现 windows sockets 规范才能做到现 windows sockets 兼容。任何能 够与 windows sockets 兼容实现协同工作的应用程序就被认为是具有 windows sockets 接口。我们称这种应用程序为 windows sockets 应用程序。windows sockets 规范定义并记录了如何使用 api 与 internet 协议族(ips,通常我们指的是 tcp/ip)连接,尤其要指出的是所有的 windows sockets 实现都支持流套接口和数 据报套接口,应用程序调用 windows sockets 的 api 实现相互之间的通讯。 windows sockets 又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯 河北工程大学毕业设计论文 9 工作。 选定 windows 平台开发网络通信程序,可以选择 windows 的 sockets 编程接口,windows sockets 是一套开放的、支持多种协议的 windows 下的网络编 程接口。现在的 winsock 已经基本上实现了与协议无关,你可以使用 winsock 来调 用多种协议的功能,但较常使用的是 tcp/ip 协议。windows sockets 无疑是我们进 行网络编程的利器。所有的 windows sockets 实现都支持流套接口和数据报套接口。 应用程序调用 windows sockets 的 api 实现相互之间的通讯。windows sockets 又利 用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。它们之间的关系 如图 2-2 所示: 应用程序1应用程序2 网络编程界面,例如windows sockets 网络通讯协议服务界面,例如tcp/ip 物理通讯介质 操作系统,例如windowsxp 图 2-2 windows sockets 实现通讯工作的各层关系图 2.2.2 socket 的同步和异步方式 所谓 socket 通常也称作“套接字“,应用程序通常通过“套接字“向网络发出请求 河北工程大学毕业设计论文 10 或者应答网络请求。对于一个网络连接来说,套接字是平等的,并没有差别,不因 为在服务器端或在客户端而产生不同级别。 所谓 socket 的同步方式,就是发送方发送数据包以后,不等待接收方响应,就 接着发送下一个数据包。socket 的异步方式,就是当发送方发送一个数据包以后, 一直等到接收方响应后,才接着发送下一个数据包。 关于套接字还有阻塞和非阻塞之分:阻塞套接字是指执行此套接字的网络调用 时,直到调用成功才返回,否则此套接字就一直阻塞在网络调用上。而非阻塞套接 字是指在执行此套接字的网络调用时,不管成功与否,都立即返回。在 windows 网 络通信软件的开发中,最常用的方法就是异步非阻塞套接字。 2.2.3 用 socket 开发一个 server-client 模型的程序 开发原理: 服务器,使用 serversocket 监听指定的端口,端口可以随意指定(由于 1024 以 下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大 于 1024 的端口),等待客户连接请求,客户连接后,会话产生;在退出客户端后, 关闭连接。 客户端,使用 socket 对网络上某一个服务器的某一个端口发出连接请求,一旦 连接成功,连接成功;客户端退出后,关闭 socket。客户端不需要指定打开的端口, 通常临时的、动态的分配一个 1024 以上的端口。 socket 接口是 tcp/ip 网络的 api,socket 接口定义了许多函数或例程,程序员 可以用它们来开发 tcp/ip 网络上的应用程序。要学 internet 上的 tcp/ip 网络编程, 必须理解 socket 接口。网络的 socket 数据传输是一种特殊的 i/o,socket 也是一种 文件描述符。socket 也具有一个类似于打开文件的函数调用 socket(),该函数返回一 个整型的 socket 描述符,随后的连接建立、数据传输等操作都是通过该 socket 实现 的。 常用的 socket 类型有两种:流式 socket(sock_stream)和数据报式 socket(sock_dgram)。流式是一种面向连接的 socket,针对于面向连接的 tcp 服务应用;数据报式 socket 是一种无连接的 socket,对应于无连接的 udp 服 务应用。为了建立 socket,程序可以调用 socket 函数,该函数返回一个类似于文件 描述符的句柄。socket 函数原型为:int socket(int domain, int type, int protocol);domain 指明所使用的协议族,通常为 af_inet,表示互联网协议族(tcp/ip 协议族); type 参数指定 socket 的类型:sock_stream 或 sock_dgram,socket 接口还 定义了原始 socket(sock_raw),允许程序使用低层协议;protocol 通常赋值 河北工程大学毕业设计论文 11 0。socket()调用返回一个整型 socket 描述符,你可以在后面的调用使用它。socket 描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用 socket 函数时, socket 执行体将建立一个 socket,实际上“建立一个 socket“意味着为一个 socket 数 据结构分配存储空间。 socket 执行体为你管理描述符表。两个网络程序之间的一个 网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址 和远端协议端口。socket 数据结构中包含这五种信息。socket 在测量软件中的使用 也很广泛。 2.3多线程技术 cpu 生产商为了提高 cpu 的性能,通常做法是提高 cpu 的时钟频率和增加缓 存容量。不过目前 cpu 的频率越来越快,如果再通过提升 cpu 频率和增加缓存的 方法来提高性能,往往会受到制造工艺上的限制以及成本过高的制约。 尽管提高 cpu 的时钟频率和增加缓存容量后的确可以改善性能,但这样的 cpu 性能提高在技术上存在较大的难度。实际上在应用中基于很多原因,cpu 的执 行单元都没有被充分使用。如果 cpu 不能正常读取数据(总线/内存的瓶颈),其 执行单元利用率会明显下降。另外就是目前大多数执行线程缺乏 ilp(instruction- level parallelism,多种指令同时执行)支持。这些都造成了目前 cpu 的性能没有得 到全部的发挥。因此,intel 则采用另一个思路去提高 cpu 的性能,让 cpu 可以同 时执行多重线程,就能够让 cpu 发挥更大效率,即所谓“超线程(hyper- threading,简称“ht”)”技术。超线程技术就是利用特殊的硬件指令,把两个逻辑 内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线 程操作系统和软件,减少了 cpu 的闲置时间,提高的 cpu 的运行效率。 采用超线程即是可在同一时间里,应用程序可以使用芯片的不同部分。虽然单 线程芯片每秒钟能够处理成千上万条指令,但是在任一时刻只能够对一条指令进行 操作。而超线程技术可以使芯片同时进行多线程处理,使芯片性能得到提升。 超线程技术是在一颗 cpu 同时执行多个程序而共同分享一颗 cpu 内的资源, 理论上要像两颗 cpu 一样在同一时间执行两个线程,p4 处理器需要多加入一个 logical cpu pointer(逻辑处理单元)。因此新一代的 p4 ht 的 die 的面积比以往的 p4 增大了 5%。而其余部分如 alu(整数运算单元)、fpu(浮点运算单元)、l2 cache(二级缓存)则保持不变,这些部分是被分享的。 虽然采用超线程技术能同时执行两个线程,但它并不象两个真正的 cpu 那样, 每个 cpu 都具有独立的资源。当两个线程都同时需要某一个资源时,其中一个要暂 时停止,并让出资源,直到这些资源闲置后才能继续。因此超线程的性能并不等于 河北工程大学毕业设计论文 12 两颗 cpu 的性能。 英特尔 p4 超线程有两个运行模式,single task mode(单任务模式)及 multi task mode(多任务模式),当程序不支持 multi-processing(多处理器作业)时, 系统会停止其中一个逻辑 cpu 的运行,把资源集中于单个逻辑 cpu 中,让单线程 程序不会因其中一个逻辑 cpu 闲置而减低性能,但由于被停止运行的逻辑 cpu 还 是会等待工作,占用一定的资源,因此 hyper-threading cpu 运行 single task mode 程序模式时,有可能达不到不带超线程功能的 cpu 性能,但性能差距不会太大。也 就是说,当运行单线程运用软件时,超线程技术甚至会降低系统性能,尤其在多线 程操作系统运行单线程软件时容易出现此问题。 在计算机编程中,一个基本的概念就是同时对多个任务加以控制。许多程序设 计问题都要求程序能够停下手头的工作,改为处理其他一些问题,再返回主进程。 可以通过多种途径达到这个目的。最开始的时候,那些掌握机器低级语言的程序员 编写一些“中断服务例程”,主进程的暂停是通过硬件级的中断实现的。尽管这是一 种有用的方法,但编出的程序很难移植,由此造成了另一类的代价高昂问题。中断 对那些实时性很强的任务来说是很有必要的。但对于其他许多问题,只要求将问题 划分进入独立运行的程序片断中,使整个程序能更迅速地响应用户的请求。 多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源 使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。 多线程在构建大型系统的时候是需要重点关注的一个重要方面,特别是在效率 (系统跑得多快)和性能(系统工作正常)之间做一个权衡的时候。恰当的使用多 线程可以极大的提高系统性能。使用多线程的好处有以下几点: 使用线程可以把占据长时间的程序中的任务放到后台去处理; 用户界面可以更加吸引人,这样比如用户在点击了一个按钮去触发某些时 间的处理,可以弹出一个进度条显示处理的进度; 程序的运行速度可能加快; 在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程 就比较有用了,在这种情况下我们可以释放一些珍贵的资源如内存占用等。 2.4 tcp/ip 协议、udp 协议 网际协议 ip 是 tcp/ip 的心脏,也是网络层中最重要的协议。 ip 层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并 河北工程大学毕业设计论文 13 把该数据包发送到更高层-tcp 或 udp 层;相反,ip 层也把从 tcp 或 udp 层接收 来的数据包传送到更低层。ip 数据包是不可靠的,因为 ip 并没有做任何事情来确认 数据包是否按顺序发送的或者被破坏。ip 数据包中含有发送它的主机地址(源地址) 和接收它的主机的地址(目的地址) 。 如果 ip 数据包中有已经封好的 tcp 数据包,那么 ip 将把他们向上 传送到 tcp 层。tcp 将包排序并进行错误检查,同时实现虚电路间的连接。tcp 数据包中 包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。 udp 与 tcp 位于同一层,但对于数据包的顺序错误或重发。因此,udp 不被应用 于那些使用虚电路的面向连接的服务 udp 主要用于那些面向查询-应答的服务。 tcp 和 udp 服务通常有一个客户/服务器的关系。两个系统间的多重连接是这 样相互确认并协调一致的,tcp 或 udp 连接唯一地使用每个信息中的如下四项进行 确认: 表 2-1 源 ip 地址发送包的 ip 地址 目的 ip 地址接收包的 ip 地址 源端口源系统上的连接的端口 目的端口目的系统上的连接的端口 端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口 对应一个 16 比特的数。服务进程通常使用一个固定的端口,例如,smtp 使用 25。 这些端口号是“广为人知”的,因为在建立与特定的主机或服务的连接时,需要这 些地址和目的地址进行通讯。 2.4.1 面向连接的 tcp “面向连接”就是在正式通信前必须要与对方建立起连接。比如你给别人打电 话,必须等线路接通了、对方拿起话筒才能相互通话。 tcp(transmission control protocol,传输控制协议)是基于连接的协议,也就 是说,在正式收发数据前,必须和对方建立可靠的连接。一个 tcp 连接必须要经过 三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍, 你只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:主机 a 向 河北工程大学毕业设计论文 14 主机 b 发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话; 主机 b 向主机 a 发送同意连接和要求同步(同步就是两台主机一个在发送,一个在 接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机 a 再发出一个数据包确认主机 b 的要求同步:“我现在就发,你接着吧!”,这是 第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话” 之后,主机 a 才向主机 b 正式发送数据。 tcp 协议能为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差 错地发往网络上的其他计算机,对可靠性要求高的数据通信系统往往使用 tcp 协议 传输数据。 图 2-3 本地连接 tcp 我们来做一个实验,用计算机 a(安装 windows 2000 server 操作系统)从“网 上邻居”上的一台计算机 b 拷贝大小为 8,644,608 字节的文件,通过状态栏右下角 网卡的发送和接收指标就会发现:虽然是数据流是由计算机 b 流向计算机 a,但是 计算机 a 仍发送了 3,456 个数据包,如上图所示。这些数据包是怎样产生的呢?因 为文件传输时使用了 tcp/ip 协议,更确切地说是使用了面向连接的 tcp 协议,计 算机 a 接收数据包的时候,要向计算机 b 回发数据包,所以也产生了一些通信量。 图 2-4 网络统计 如果事先用网络监视器监视网络流量,就会发现由此产生的数据流量是 9,478,819 字节,比文件大小多出 10.96%(如上图所示),原因不仅在于数据包和帧 河北工程大学毕业设计论文 15 本身占用了一些空间,而且也在于 tcp 协议面向连接的特性导致了一些额外的通信 量的产生。 2.4.2 面向非连接的 udp 协议 “面向非连接”就是在正式通信前不必与对方先建立连接,不管对方状态就直 接发送。这与现在风行的手机短信非常相似:你在发短信的时候,只需要输入对方 手机号就 ok 了。 udp(user data protocol,用户数据报协议)是与 tcp 相对应的协议。它是面 向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去! 图 2-5 本地连接 udp udp 适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们 经常使用“ping”命令来测试两台主机之间 tcp/ip 通信是否正常,其实“ping”命 令的原理就是向对方主机发送 udp 数据包,然后对方主机确认收到数据包,如果数 据包是否到达的消息及时反馈回来,那么网络就是通的。例如,在默认状态下,一 次“ping”操作发送 4 个数据包(如上图所示)。大家可以看到,发送的数据包数 量是 4 包,收到的也是 4 包(因为对方主机收到后会发回一个确认收到的数据包)。 这充分说明了 udp 协议是面向非连接的协议,没有建立连接的过程。正因为 udp 协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如 tcp 协议高。qq 就使用 udp 发消息,因此有时会出现收不到消息的情况。 2.5 client/server 结构(客户机/服务器模式) client/server 结构(c/s 结构)是大家熟知的客户机和服务器结构。它是软件系统 体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到 client 端 和 server 端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是 client/server 形式的两层结构,由于现在的软件应用系统正在向分布式的 web 应用 河北工程大学毕业设计论文 16 发展,web 和 client/server 应用都可以进行同样的业务处理,应用不同的模块共享 逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现 有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。 c/s 结构的优点是能充分发挥客户端 pc 的处理能力,很多工作可以在客户端处 理后再提交给服务器。对应的优点就是客户端响应速度快。缺点主要有以下几个: (1).只适用于局域网。而随着互联网的飞速发展,移动办公和分布式办公越来越 普及,这需要我们的系统具有扩展性。这种方式远程访问需要专门的技术,同时要 对系统进行专门的设计来处理分布式的数据。 (2).客户端需要安装专用的客户端软件。首先涉及到安装的工作量,其次任何一 台电脑出问题,如病毒、硬件损坏,都需要进行安装或维护。还有,系统软件升级 时,每一台客户机需要重新安装,其维护和升级成本非常高。 (3).对客户端的操作系统一般也会有
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 1月安全例会会议内容
- 以学生为中心的教育心理服务体系建设探讨
- 施工安全管理论文
- 主要负责人安全生产管理职责
- 港口散货码头智能化作业流程优化与管理制度创新
- 工业管道安装施工方案
- 物流中心仓储规划设计及施工技巧
- 畜牧废弃物的循环利用模式-洞察阐释
- 高校实验室人员职业病防护手册
- 腹横肌功能训练对老年平衡能力的长期效果研究-洞察阐释
- 基于STC89C52的智能烟雾检测报警系统论文
- 危险化学品安全管理课件
- 23秋国家开放大学《液压气动技术》形考任务1-3参考答案
- 机械制造工艺学课程设计-张紧轮支架
- 21ZJ111 变形缝建筑构造
- 暨南大学视听说听力材料part 2 A文章
- 2023年成都市成华区数学六年级第二学期期末教学质量检测模拟试题含解析
- QC提高土工格栅加筋挡土墙施工质量中铁
- 现代大学英语-第三版-精读3-教师教案
- 专升本《城市管理学》-试卷-答案
- 说儒(上、下)-胡适文档全文预览
评论
0/150
提交评论