基于企业级即时通信IM系统设计_第1页
基于企业级即时通信IM系统设计_第2页
基于企业级即时通信IM系统设计_第3页
基于企业级即时通信IM系统设计_第4页
基于企业级即时通信IM系统设计_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

2013 届本科毕业设计(论文)基于企业级即时通信 IM系统摘要:现在即时通讯系统服务的内部拓扑中大部分采用客户/服务器模型,客户/ 服务器/客户模型和客户/客户模型,并且市 场 上应用的很多即时通信软件比如 QQ 和 MSN 都采用的是客 户/服务器/客户模型,由于它们都需要由位于中心的服务器来协调,这对一些想 拥有自己内部即时通信软件的小企业和家庭的局域网用户来说,服务器的成本 实在是太大,于是 便有了编写本软件的构想。本软件功能成功摆脱了中心服务器的束缚,它的基本功能就是让用户能够在局域网上通过采用 TCP/IP 协议进行点对点交流。本软件通过 Visual C+软件创建的是对话框应用程序, 连接后服务器可以充当客户机,客户机也可以充当服务器。它 们可以同一台计算机上,也可以把应用程序复制到另一台计算机上, 这样没有中间服务器存在,在两个独立的计算机上分别运行应用程序,从而通过网络传递消息。近年来,随着全球信息化进程的不断发展,网 络也在飞速发展。出于高效、快速地处理各种事务的目的,越来越多的企业在其内部使用局域网来进行工作。在内部局域网的帮助下,企业得以简化信息流程,提高信息交换的速度,从而提高工作效率。关键词:P2P、TCP/IP、 Visual C+、通信2013 届本科毕业设计(论文)Based on the enterprise instant communication IM systemStuName:HuangWei class:078205326ADVISOR:FuLin YangAbstract:Now im system services most of internal topology by client/server model, client/server/client model and customer/customer model, and the market a lot of instant communication software applications such as QQ and MSN dominated by client/server/client model, because they all need by the center server to coordinate, this for some want their own internal instant communication software small businesses and families LAN users, server cost is really too big, so had the idea of writing the software.The software function from center server success the basic function of bondage, it is to let the user to online through LAN using TCP/IP protocol to peer-to-peer communication. This software through Visual c + + software created is dialog application, after connection could serve as the client, client server also can serve as a server. They can be the same computer, also can put application copied to another computer, so no middle server exist, in two separate computer to run applications, which respectively relay messages through the network.In recent years, along with the continuous development of global informationization, the network is growing rapidly. For efficient, fast processing various affairs purpose, more and more enterprises in its internal use LAN to work. In internal LANs help, enterprise simplifies the flow of information, improve information exchange rate, which can improve the work efficiency.Key words: LAN, instant messaging, client, server, multi thread,share memory,I nformation 2013 届本科毕业设计(论文)目 录1 引 言 .11.1 课题背景及意义: .11.2 课题现状 .11.3 本文的主要工作: .21.4开发平台与技术的选择及介绍 .22 需求分析及可行性研究 .32.1 需求分析: .32.1.1 时间要求 .32.1.2 功能要求 .32.1.3 系统基本流程图 .42.1.4 性能要求 .42.1.5 测试环境规定 .42.2 可行性研究: .43 相关开发技术的原理性说明 .53.1 win32编程原理及 MFC框架 .53.1.1 WIN32编程原理 .53.1.2 MFC框架 .63.2 TCP/IP 协议及 WINDOWS SOCKETS网络编程接口 .83.2.1 TCP/IP协议简介 .83.2.2 WINDOWS SOCKETS网络编程接口概述 .103.3 多线程编程技术 .113.3.1 进程及线程概述 .113.3.2 Win32 API对多线程编程的支持 .124 总体设计 .134.1体系结构设计 .134.2 功能模块划分 .144.3 数据结构设计 .154.4 用户界面设计 .154.4.1 服务器端显示界面: .154.4.2 客户端显示界面: .165 详细设计及编码实现 .165.1 主框架及用户界面模块详细设计 .165.2 网络扫描模块详细设 .185.3 信息发送模块详细设计 .185.4 信息接收模块详细设计 .206 测 试 .20结 论 .21致 谢 .22参考文献 .232013 届本科毕业设计(论文)1 引 言1.1 课题背景及意义:近年来,随着全球信息化进程的不断发展,网络也在飞速发展。出于高效、快速地处理各种事务的目的,越来越多的企业在其内部使用局域网来进行工作。在内部局域网的帮助下,企业得以简化信息流程,提高信息交换的速度,从而提高工作效率。然而,随着企业规模的扩大,业务量的增加,在局域网上运行的应用越来越多,如知识库、网络会议、数据库应用和数据的同步与备份等,这些应用对局域网的信息吞吐、处理能力的要求也越来越高。这些在企业内部原有局域网设计之初未曾考虑到的新情况的出现使得局域网不堪重负,容易发生信息阻塞,此时,局域网不但不能提高生产效率,反而成为企业发展的瓶颈。为了解决上述矛盾,人们提出了许多方法。提升网络带宽及增加服务器的吞吐能力是解决此矛盾的一种方法。然而,从企业运行的成本方面考虑,无论是单纯地提升网络带宽或增加服务器的吞吐能力都不能从根本上解决局域网资源紧张的问题,对旧有局域网的大规模硬件改造反而会增加企业的负担。 在本文中将讨论一种基于 Socket 的局域网通信工具的设计与实现方法。基于 Socket 的局域网通信软件可以为企业原有的局域网提供一种良好,安全,快速的通信机制。它的实现无需对企业原有的局域网硬件进行任何改动,具有实现成本低廉的优点,它的使用能有效地降低局域网通信负荷,提高局域网的使用效率,可以很好地解决企业内部局域网的各种通信需求。 基于 Socket 的局域网聊天工具是此类局域网通信软件的具体实例之一,它很好地诠释了 Socket 通信的原理,并且在企业内部通信、教学、讨论等应用中都具有一定的实用价值。它具有信息收发速度快,保密性好,占用网络带宽资源低,占用服务器吞吐能力低,易于编程实现等优点。基于 Socket 的局域网通信软件应用范围广阔,不但可以处理传统的通信需求,而且也能扩展以适应新型的网络应用,如网络教育,数据影音传输等,拥有广泛的应用前景。1.2 课题现状 基于局域网的即时通信工具,实际上是互联网即时通信工具的一个小规模版本,广域网上的即时通信工具,如今一般采用 UDP 或者 TCP 协议体系来实2013 届本科毕业设计(论文)现 ,开发技术已经比较成熟,比如较早的 ICQ,MSN Messanger,Yahoo 通这些国外开发的产品,还有国产的有名的 QQ,新浪 UC,LAVA-LAVA 等,这些工具统统都实现了广域网上的即时通信,尽管都是即时通信,实现了即时聊天,以及文件传输的主要功能,但是也各有各的特色,比如 ICQ 的巨大客户群,MSN 的个性化表情,YAHOO 通的易操作性等。而 QQ 也具有一个相当方便的屏幕截图功能,另外就是,所有上述软件都实现了网络即时的视频,语音聊天功能。这些软件,在使用方面各有特色,在实现方面也各有所长,但基于这些产品正在商业运营阶段,其实现方式属于商业机密,具体细节不可能得知,但是它在大的方面无非就是各种利用各种平台上的网络通信接口,建构基于下层TCP/IP,或者 UDP/IP 协议的软件产品。在局域网内,这些功能的实现跟广域网相比更加简单,因为局域网的网络结构本身比广域网要复杂,但是又可以借些理解网络协议,以及网络通信工具的实现原理,所以仍然极具研究价值。1.3 本文的主要工作:本文主要工作是设计一个基于 WINDOWS 平台的局域网即时聊天工具,然后阐述本软件的功能、特点及使用方法,并详细阐述开发本软件所用的相关技术,具体分析本软件的各个模块的功能及实现方法,说明本软件的设计思想及方法。1.4开发平台与技术的选择及介绍1.4.1 开发环境的介绍所设计的是一个面向中小型机构内部通信需求的局域网即时信息软件,要在短时间内开发出来并且要满足客户要求,无论是硬件还是软件都要选择合适,要求如下:开发设备应该完备;开发机器的性能必须稳定;操作系统的选择必须恬当;开发出的程序可以在尽可能多的平台上运行;要求运行机配置尽可能低档。对此, 们选择的硬件环境和软件环境如下: (1) 硬件环境 开发该系统应尽可能采用高档的硬件。因此,在应用时应采用更好的配置。处理器:Intel Pentium PIII 或更高处理器。 内存:128MB 或更高。 网络:局域网。 (2) 软件环境 2013 届本科毕业设计(论文)选择好的操作系统和好的编程语言是系统优劣的关键, 们要求系统在尽可能多的环境下运行,故选择 Windows XP 平台,对于一些无法在 98 中运行的API 函数,一律不采用,并采取优化的算法编写程序。因 VC6.0 具有友好的集成开发界面、面向对象的可视化开发模式、良好的数据库及多媒体应用支持以及高效的软件开发与程序运行,功能更大,开发效率更高,不仅是网络环境下的优秀前端开发语言和工具,也是服务器端 Web 编程的优秀工具。加之 本人对本系统的操作最为熟练,所以选择该平台为开发环境。 操作系统:Windows XP 或 Window2000。 开发工具:VC+6.0。 1.4.2 WINDOWS SOCKETS网络编程接口概述既然选定了 WINDOWS 平台,而又要开发网络通信程序,所以可以选择WINDOWS 的 SOCKETS 编程接口,Windows Sockets 是一套开放的、支持多种协议的 Windows 下的网络编程接口。现在的 Winsock 已经基本上实现了与协议无关,你可以使用 Winsock 来调用多种协议的功能,但较常使用的是 TCP/IP 协议。Winsockets 无疑是 们进行网络编程的利器。1.4.3 VC+6.0开发平台简介开发平台 选用了 VC6.0,因为一直以来都使用 VC6 进行学习,对这个 IDE最为熟悉,再者 VC 同样是由微软开发的系统,与其操作系统,网络接口具有最为密切的契合优点,所以选择了 VC6.0。2 需求分析及可行性研究2.1 需求分析:2.1.1 时间要求本项目作为大学本科毕业设计题目,从 3 月 8 号接受选题开始,在 5 月 10号之前完成系统设计,编码实现工作,在 5 月 20 号之前完成毕业设计论文初稿,6 月 1 号之前最终完成论文。2.1.2 功能要求(1)用户端之间的信息发送,本程序需要实现的最基本的功能(2)在线用户主机名列表的维护。2013 届本科毕业设计(论文)(3)在 C/S 模式中,服务器与客户端是相互依赖的。在客户端启用以后,需要查看服务器端是否在线,服务器在线才能正常使用客户端,如果服务器不在线,则在检测一定次数以后自动退出客户端程序。在使用过程中,客户端在指定时间内未向服务器端发送信息的,服务器认为客户端下线;客户端在一定时间内未收到服务器端信息的,认为服务器已经下线,则提示用户并建议退出,在用户一定时间后没有退出的则自动关闭客户端程序。2.1.3 系统基本流程图图 2-1 聊天系统工作流程图2.1.4 性能要求首先要求程序要完全可靠,可以应付种种由于系统问题产生的错误,比如初始网络失败,对方突然下线等。要求提前设想到类似的尽可能多的可能发生的事件,做出相应的应对措施,并向用户提交简单易懂清晰明白的提示信息。程序要有良好的容错性,当用户进行非法操作时或者系统本身出现问题时要能以最好的方式退出程序,避免发生程序假死现象。开发文档要有好的易理解性,如果系统又要交由别人接手开发,或者自己由于种种原因需要进行二次开发,那么要保证以后能够清晰的理解整个系统的设计思路以及实现细节。要求程序对所运行之系统的硬件条件要求尽可能低,运行时内存占用尽可能小,响应速度要尽可能快。并且不发生内存泄漏之类影响系统运行的错误事件。并且要求易于维护及扩展。所以应该采用模块化开发,各个模块之间不要有太多的联系,以免维护困难。2.1.5 测试环境规定在开发完成以后,自己进行一个全面的测试。2013 届本科毕业设计(论文)2.2 可行性研究:(1)成本可行性分析因为本软件只做开发学习使用,所以暂且不考虑经济成本及盈利问题。(2)技术可行性分析首先 已经搭建好开发所需要的软硬件平台,并进行了合理而完善的需求分析,做好了充分的前期准备工作,其次因为本程序的平台将基于 WINDOWS,将要使用网络通信技术,而 WINDOWS 有完善成熟的网络通信接口,以及与VC 开发环境的严密契合能力,加之相类似的更大规模的 INTERNET 通信工具产品也已有例在先,所以这个程序的开发可行性在技术上是完全可行的。3 相关开发技术的原理性说明3.1 win32编程原理及 MFC框架3.1.1 WIN32编程原理所谓的 Win32 开发,就是在 C 语言的层面上,直接使用 Win32 API 开发Windows 应用程序或者系统程序。虽说现在直接用 Win32 API 开发应用程序的人已经不多了,但是深入理解 Windows 系统程序设计原理,仍然是成为Windows 开发高手的良好途径。所谓的 Win32,其实是一个 API 规范,与UNIX 系统编程接口标准 POSIX 是相对应的。下面是进行直接的 WIN32 SDK方式编程的基本思路或者说是一个框架:一个 WINDOWS 程序分为程序代码和 UI(User Interface 用户接口)资源两大部份,两部份最后以 RC 编译程序整合为一个完整的 EXE 文件。所谓 UI 资源是指功能菜单、对话框、程序图标、光标形状等等东西。这些 UI 资源的实际内容(二进制代码)系借助各种工具产生,并以各种扩展名存在,如 .ico .bmp .cur 等等。程序员必须在一个所谓的资源描述档( .rc )中描述它们。RC 编译器( RC.EXE )读取 RC 文件的描述后将所有 UI 资源文件集中制作出一个.RES 文件,再与程序代码结合在一起,这才是一个完整的 Windows 可执行文件。与控制台程序相同的是,一个 WIN32 程序也必须有一个程序入口点,但是在这儿它不再叫 main(),而叫做 WinMain(),当 WINDOWS 的 SHELL 检测到用户欲执行一个 EXE 程序,就会调用加载器把程序进行加载,然后调用 C startup code,后者再调用 WinMain(),程序的执行就开始了,WinMain()函数的原型为:2013 届本科毕业设计(论文)int CALLBACK WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow);图 3-1 32 位 WINDOWS 程序的开发流程下面程序必须进行必要的初始化工作产生窗口,第一步是注册一个窗口类:用 API 函数:RegisterClass(), 而这个函数需要一个已经定义好的系统结构:WNDCLASS,这个结构里面定义了窗口的种种属性,需要自己定义,但是许多属性都有默认值。然后调用 CreateWindow()函数来产生具有上述定义属性的已注册窗口,但是需要注意的是它只是生成窗口,但并不显示之,所以还需要调用一个函数 ShowWindow()将它显示在屏幕上,做完这些初始化工作以后,系统将进入消息循环:当消息循环捕捉到消息以后将交由窗口函数 WndProc()窗口函数进行相应的处理。这样,一个基于消息事件驱动的 WIN32 程序的雏形就建立了起来。3.1.2 MFC框架所谓应用程序框架同一类型应用程序的结构大致相同,并有很多相同的源代码,因此可以通过一个应用程序框架 AFX(Application FrameWorks)编写同一类型应用程序的通用源代码。为了帮助用户处理那些经常使用又复杂繁琐的各种 Windows 操作,Visual C+设计了一套基础类库(Microsoft Foundation Class Library,简称 MFC)。MFC 把 Windows 编程规范中的大多数内容封装成为各种类,使程序员从繁杂的编程中解脱出来,提高了编程和代码效率由上面的介绍可以看出,直接用 API 函数开发一个 WIN32 程序是相当麻烦的,有好多既定的重复性的工作要做,所以微软就用 C+的类机制将绝大部分的 API 函数进行了封装,构成了类,并且将基本的流程也封装在类机制下面,2013 届本科毕业设计(论文)大大简化了 WIN32 开的的复杂性,尤其是在开发比较大型程序的时候这个便宜性更会得以体现。它就是 Microsoft Foundation Classes,简称为 MFC,可以说它是VC 开发环境的一个核心构件。MFC 构架了一个庞大的类体系结构,在 4.0 时代就多达 189 个类,程序代码达 252 个文件,58 个头文件,共 10MB 之多,MFC4.2 时又多加了 29 个类,但是最为主干的是下面类结构示图所示的一些类:CObjectCWnd CDocumentCwinThreadCcmdTarge图 3-2 MFC 类框架主体 CObject 是 MFC 类库的根类。 MFC 类库包括: (1)CCmdTarget 类:是 CObject 类的子类,它是 MFC 库中所有具有消息映射属性的类的公共基类。它的子类有 CWinThread 类, CWnd 类、 CDocument 类,从 CCndTarget 类派生的类能在程序运行时动态创建对象,并处理命令消息。 (2)CWinThread 类:是 CCmdTarget 的子类。 CWinThread 是所有线程类的基类,封装了应用程序操作的多线程功能。应用程序类 CWinApp 是 CWinThread 的子类,封装了初始化、运行、终止应用程序的代码。 (3)CWnd 类:窗口类,是 CcmdTarget 类的子类,从 CWnd 派生的类可以拥有自己的窗口,并对它进行控制。窗口框架类 CFrameWnd 和 CView 类是 CWnd 的子类,前者创建和维护窗口的边框、菜单栏、工具栏、状态栏,负责显2013 届本科毕业设计(论文)示和搜索用户命令,后者负责为文档提供一个或几个视图。视图的作用是为修改、查询文档等任务提供人机交互的界面。 (4)文档类 CDocument 类:是 CCmdTarget 类的子类,负责封装和维护文档。文档包括应用程序的工作成果或环境设置数据等,可以是程序需要保存的任何内容。 一个 MFC 应用程序并不直接操作上述类,而是以上述类为基类派生新的类,构建 Windows 应用程序的基本框架。构建一个基于 MFC 框架的程序,可以使用 MFC 的向导程序,但首先要明白,一个基于 MFC 的程序可以有几种类型:基于单文档结构的程序,基于多文档结构的程序以及基于对话框的应用程序,不同类型的程序具有不同的程序属性。使用其向导以及控件编程,使得不论是界面编写,还是程序内核设计,都更加的简单。其中有合理的消息映射机制,有方便的运行时类型识别功能,更有文档/视图结构设计,文档串行化功能等非常多的优秀功能。3.2 TCP/IP 协议及 WINDOWS SOCKETS网络编程接口3.2.1 TCP/IP协议简介(1)TCP/IP 协议通常包含了一系列与“TCP(传输控制协议)”和“IP(网际协议)”有联系的网络协议,它包括其它的协议,应用软件,甚至网络媒介。这些协议的示例是:UDP (User Datagram Protocol)协议、 ICMP(Internet Control Message Protocol)协议、 ARP(地址解析协议)和其他一些协议的协议组。应用的示例:telnet(远程登录)、ftp(文件传递协议 )、http 等。 (2)逻辑结构:2013 届本科毕业设计(论文)图 3-3 逻辑结构这是 TCP/IP 协议的分层结构在互连网计算机上的表示,用互连网技术互相通信的每台计算机都有这样的分层结构。这样的分层结构决定了计算机在 internet 上互相通信的方式。数据通过这样的分层结构从上层传到底层,然后通过网线把数据传送出去。底层的水平线代表以太网网线,“O”代表收发器,“*”代表 IP 地址, “”代表网址,理解这样的分层结构是理解 INTERNET 技术的基础。(3)本论文涉及到的协议: IP、TCP IP( Internet Protocol)是 TCP/IP 的心脏,也是网络层中最重要的协议。 IP 层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层-TCP 或 UDP 层;相反,IP 层也把从 TCP 或UDP 层接收来的数据包传送到更低层。IP 数据包是不可靠的,因为 IP 并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP 数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。 UDP(IP 协议号 17)是一个无连接的数据报协议。它是一个“best effort”或者“不可靠 ”协议不是因为它特别不可靠,而是因为它不检查数据包是否已经到达目的地,并且不保证它们按顺序到达。UDP 的典型性应用是如流媒体(音频和视频等)这样按时到达比可靠性更重要的应用,或者如 DNS 查找这样的简单查询/响应应用,如果需要建立可靠的连结,哪么所作的额外工作将2013 届本科毕业设计(论文)是不成比例地大。本程序只应用于局域网中,局域网中的数据流传输的可靠性高,故选择 UDP 协议。3.2.2 WINDOWS SOCKETS网络编程接口概述在网络编程中最常用的方案便是 Client/Server (客户机/ 服务器)模型。在这种方案中客户应用程序向服务器程序请求服务。一个服务程序通常在一个众所周知的地址监听对服务的请求,也就是说,服务进程一直处于休眠状态,直到一个客户向这个服务的地址提出了连接请求。在这个时刻,服务程序被惊醒 并且为客户提供服务对客户的请求作出适当的反应。为了方便这种 Client/Server 模型的网络编程,90 年代初,由 Microsoft 联合了其他几家公司共同制定了一套 WINDOWS 下的网络编程接口,即 Windows Sockets 规范,它不是一种网络协议,而是一套开放的、支持多种协议的Windows 下的网络编程接口。现在的 Winsock 已经基本上实现了与协议无关,你可以使用 Winsock 来调用多种协议的功能,但较常使用的是 TCP/IP 协议。Socket 实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有 Socket 接口的计算机通信。应用程序在网络上传输,接收的信息都通过这个 Socket 接口来实现。如下图所示:2013 届本科毕业设计(论文)图 3-4 面向连接的套接字的系统调用图微软为 Visual C+定义了 Winsock 类如 CAsyncSocket 类和派生于CAsyncSocket 的 CSocket 类,它们简单易用, 们当然可以使用这些类来实现自己的网络程序,但是为了更好的了解 Winsock API 编程技术,本设计中将使用底层的 API 函数实现 Winsock 平台的即时通信工具。在 VC 中进行 WINSOCK 的 API 编程开发的时候,需要在项目中使用下面的三个文件,否则会出现编译错误。(1) WINSOCK.H: 这是 WINSOCK API 的头文件,需要包含在项目中。(2) WSOCK32.LIB: WINSOCK API 连接库文件。(3) WINSOCK.DLL: WINSOCK 的动态连接库,位于 WINDOWS 的安装目录下。3.3 多线程编程技术3.3.1 进程及线程概述进程和线程都是操作系统的概念。进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运行2013 届本科毕业设计(论文)过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放或关闭。线程是进程内部的一个执行单元。系统创建好进程后,实际上就启动执行了该进程的主执行线程,主执行线程以函数地址形式,比如说 main 或 WinMain函数,将程序的启动点提供给 Windows 系统。主执行线程终止了,进程也就随之终止。每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中。一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统资源,所以线程间的通讯非常方便,多线程技术的应用也较为广泛。多线程可以实现并行处理,避免了某项任务长时间占用 CPU 时间。要说明的一点是,目前大多数的计算机都是单处理器(CPU)的,为了运行所有这些线程,操作系统为每个独立线程安排一些 CPU 时间,操作系统以轮换方式向线程提供时间片,这就给人一种假象,好象这些线程都在同时运行。由此可见,如果两个非常活跃的线程为了抢夺对 CPU 的控制权,在线程切换时会消耗很多的 CPU 资源,反而会降低系统的性能。这一点在多线程编程时应该注意。Win32 SDK 函数支持进行多线程的程序设计,并提供了操作系统原理中的各种同步、互斥和临界区等操作。Visual C+ 6.0 中,使用 MFC 类库也实现了多线程的程序设计,使得多线程编程更加方便。3.3.2 Win32 API对多线程编程的支持Win32 提供了一系列的 API 函数来完成线程的创建、挂起、恢复、终结以及通信等工作。下面将选取其中的一些重要函数进行说明。 (1) HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,DWORD dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId);该函数在其调用进程的进程空间里创建一个新的线程,并返回已建线程的句柄。2013 届本科毕业设计(论文)(2) DWORD SuspendThread(HANDLE hThread);该函数用于挂起指定的线程,如果函数执行成功,则线程的执行被终止。(3) DWORD ResumeThread(HANDLE hThread);该函数用于结束线程的挂起状态,执行线程。 (4) VOID ExitThread(DWORD dwExitCode);该函数用于线程终结自身的执行,主要在线程的执行函数中被调用。其中参数 dwExitCode 用来设置线程的退出码。 (5) BOOL TerminateThread(HANDLE hThread,DWORD dwExitCode);一般情况下,线程运行结束之后,线程函数正常返回,但是应用程序可以调用 TerminateThread 强行终止某一线程的执行。使用 TerminateThread()终止某个线程的执行是不安全的,可能会引起系统不稳定;虽然该函数立即终止线程的执行,但并不释放线程所占用的资源。因此,一般不建议使用该函数。 (6)BOOL PostThreadMessage(DWORD idThread,UINT Msg,WPARAM wParam,LPARAM lParam);该函数将一条消息放入到指定线程的消息队列中,并且不等到消息被该线程处理时便返回。调用该函数时,如果即将接收消息的线程没有创建消息循环,则该函数执行失败。4 总体设计4.1体系结构设计通常的通信工具,都采用客户机/服务器(C/S)体系结构,C/S 结构是这样的一种结构:它包括一个客户机(或前端),一个服务器(或称后端),客户机的作用是访问和处理远程服务器上的数据,服务器的作用是接收和处理客户机的数据请求。有时,可能有多个客户向同一个服务器同时请求服务,这就需要服务器决定怎样处理这些请求。Client/Server 结构是当前数据库应用程序中极为流行的一种方式。尤其是网络技术的发展,使得当前很多系统都采用这种方式进行构造,其最大的优点是将计算机工作任务分别由客户端和服务器端来共同完成,这样有利于充分合理的利用系统资源。另外它的服务器端还可以将信息集中起来,任何客户机都2013 届本科毕业设计(论文)可以通过访问服务器而获得所需的信息。Client/Server 模型最终可归结为一种“请求/应答”关系。一个请求总是首先被客户发出 ,然后服务器总是被动地接收请求,返回客户需要的结果。在客户发出一个请求之前,服务进程一直处于休眠状态。一个客户提出请求后,服务进程被“唤醒”并且为客户提供服务,对客户的请求做出所需要的应答。如下图所示:图 4-1 客户机服务器通信结构示图在客户端启动后,客户端计算得到本地网络的广播地址,进行广播查找服务器端,服务器接收到客户端的广播信息后返回服务器地址,则客户端接收、验证信息并记录服务器端地址,然后客户端启动定时期,定时发送信息到服务器,以告知服务器自己在线,然后服务器返回在线用户列表,服务器依靠客户端发送的信息来更新维护在线用户列表。在客户端与服务器尽心数据交换,拥有了在线用户列表后,就可以选择 IP 进行客户端之间的点对点信息交流了。如果服务器不在线,则客户端会提示用户退出,在一定的时间后自动退出。4.2 功能模块划分根据以上的系统需求分析,以及体系结构设计,可以对系统进行如下的功能模块划分如下图所示。2013 届本科毕业设计(论文)图 4-2 功能模块图其中主线程模块完成对网络的初始化,然后启动两个子线程:服务端监听线程以及网络扫描模块线程,然后由网络扫描模块得到当前的网络用户分布情况,并填充相关的数据结构,然后生成用户列表界面显示给用户。通信模块又包括两个子模块:数据接收模块和数据发送模块,这两个模块都由系统定义的网络事件来触发。输入/输出模块用来响应用户双击用户列表的某一项要准备发送信息时的消息,以及当系统接收到某个网络用户发送来的消息,要将其显示给用户的时候。网络扫描模块是由主线程模块启动,进行网络扫描,确定哪些用户当前处于可到达状态,以及哪些可到达状态的用户安装有相应的通信软件,并启动之可以与之进行通信。4.3 数据结构设计(1)在线用户信息结构体: struct USERINFOCString ip; /存储 IPBOOL on_line; /用于判断次 IP 是否更新过,未更新则从单向链表中删除USERINFO *next; /下一个存储单元的地址,最后一个为 NULL;注:用于构建服务器端的在线用户单向链表。2013 届本科毕业设计(论文)(2)从服务器端发送到客户端的在线用户列表信息结构:(3)传输到线程的信息结构体:客户端:struct RECVPARAM SOCKET sock; /存储接口套接字HWND hwnd; /存储窗口句柄;服务器端:struct RECVPARAMSOCKET sock; /存储接口套接字HWND hwnd; /存储窗口句柄BOOL endtread; /存储用于判断是否退出线程循环USERINFO *userhead; /存

温馨提示

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

评论

0/150

提交评论