局域网聊天软件的设计与实现毕业论文.doc_第1页
局域网聊天软件的设计与实现毕业论文.doc_第2页
局域网聊天软件的设计与实现毕业论文.doc_第3页
局域网聊天软件的设计与实现毕业论文.doc_第4页
局域网聊天软件的设计与实现毕业论文.doc_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

。郑州轻工业学院本科毕业设计(论文) 题 目 局域网聊天软件的 _设计与实现_学生姓名 * 专业班级 * 学 号 1234567890 院 (系) 计算机与通信工程学院指导教师(职称) *(讲师) *(副教授)完成时间 2015年 5月 30日 郑州轻工业学院毕业设计(论文)任务书题目 局域网聊天软件的设计与实现 专业 * 学号 * 姓名 * 主要内容、基本要求、主要参考资料等:主要内容: 1. 客户端的设计和实现2. 服务器的设计和实现3. 多用户聊天及文本文件的传输基本要求: 1. 熟悉TCP通信协议以及编程、socket网络编程2. 熟悉多线程和多进程、线程同步 3. 熟悉linux系统下的文件传输主要参考资料:1 何波玲,绥菱歌.TCP/UDP下一种网络透明传输服务编程接口是实现方法J. 哈尔滨师范大学自然科学学报,2011,27(6):56-60.2 殷晓辉.基于linux操作系统的网络编程方法研究J. 科技传播,2011,4(13):210-211.3 张海光.浅谈Linux操作系统下的多线程编程J.华南金融脑,2006,9(3):172-184.完 成 期 限: 2015 年 5月30日 指导教师签名: 专业负责人签名: 2015年 1月 12 日-可编辑修改-。目 录摘要IABSTRACTII1引言11.1开发背景11.2 网络聊天室的现状及发展21.3 课题研究的意义32 开发平台及技术支持42.1 开发环境42.2 系统实现技术42.2.1网络传输层协议TCP/IP 协议42.2.2 Socket网络编程 端口和套接口 套接字和套接口地址结构72.2.3 C/S(客户/服务器)模型 C/S模型的基本概念 C/S模型的优缺点82.2.4 多线程编程102.2.5 文本文件的传输122.3 系统设计框架123软件需求分析及可行性研究143.1需求分析143.1.1时间要求143.1.2 功能需求分析143.1.3 运行需求分析153.1.4 性能需求分析163.2 可行性研究164 总体设计174.1 体系结构设计174.2 功能模块划分175 详细设计与编码实现195.1 服务器编码实现及结果显示195.2 客户端编码实现及结果显示296 软件功能测试及分析346.1功能性测试346.2 容错性测试346.3 测试分析34结束语36致谢37参考文献38局域网聊天软件的设计与实现摘要本文提出并设计了一个局域网聊天工具,在LINUXS平台上以C语言作为编程语言,利用Vi、GCC编辑工具编译,以TCP/IP模式下Socket通讯模式为基础,采用C/S模式即客户端/服务器模式加以实现。所涉及专业技术主要包含socket网络编程,C 程序设计,多线程机制。此聊天程序的客户端采用TCP进行通信,服务器也不例外,所有用户的信息主要是由服务器进行管理,一旦用户信息发生变化,就要通知所有客户端。本论文注重的更多的是对软件的需求性分析和设计实现两个阶段,这两个阶段决定了一个软件的形成和它的性能,编码阶段只是把自然语言翻译成计算机语言的阶段。 关键词 局域网; 客户端/服务器模式; 多线程机制THE DESIGN AND IMPLEMENTATION OFLAN CHAT SOFTWAREABSTRACTThis paper put forward and designed a LAN chat tools,using C language as the programming language on LINUXS platforme, using Vi, GCC editing tools compiles and Socket communication mode as the foundation, using the client/server mode to come true.Professional technology involved mainly include the socket network programming, C program design, multithreading mechanisms.The chat software using TCP to communicate, all user information is mainly managed by the server,it will inform all clients once the user information change .This paper focus more on the demand for software analysis and design to realize two stages, that determines the formation of a software and its performance, the coding phase is the time that natural language is translated into computer language.KEY WORDS LAN, Client/Server Mode, Multi-Threading MechanismsII-可编辑修改-1引言1.1开发背景近年来,嵌入式Linux技术得到了迅猛的发展,它在我们的工作生活中的应用越来越广泛且重要。Linux最大的特点之一就是,它是一款免费资源,支持多任务、多用户、多线程和多CPU的操作系统。相对于其他系统,Linux有很多突出的优点,可靠性高且功能强大灵活,最重要的一点是成本较低,很多用户都非常的乐意用这个系统,所以它在我们的生活中越来越受欢迎。此外,多线程、多进程技术的广泛使用,大大提高了系统的效率。这使得Linux成为了越来越多用户的理想开发平台。在这个信息化不断占据主导地位的世界里,网络也应运而生,人与人之间都是通过网络进行沟通,面对面式的交流越来越少,所以一套高效灵活的聊天软件具有时效性是很有必要的1。MSN、飞信、QQ、YY、阿里旺旺、百度Hi等等各种各样的互联网通信软件层出不穷。然而出于保障高效性和和高质量的目的,越来越多的通信网络出现在局域网中,局域网的使用给人们带来了极大的便利、工作流程得到了极大的简化、工作效率得到了极大的提高,更重要的是在这样良好的状况下还极大的保证了工作的有效性和准确性。但在局域网范围内的即时通信软件,如今还是非常的匮乏。另外,大多数通信软件都是基于Windows操作系统下设计的,Linux操作系统下的通信软件又是非常的少。基于上述的这种现状,为了力求使局域网通信技术的优势得到充分发挥,也为了解决局域网聊天软件匮乏的现状,我们在Linux平台上以C语言作为编程语言,利用Vi、GCC编辑工具编译,以TCP/IP模式下Socket通讯模式为基础,采用C/S模式即客户端/服务器模式,设计一款功能强大、高可靠性、高灵活性、成本低的局域网聊天软件。本文中将讨论一种基于Scoket的局域网通信工具的设计与实现方法。用Socket作为软件设计基础的通信工具,能够给用户提供一种安全快速的通信环境,这就相当于岁企业原有的局域网环境进行了大大的改善,但是这种改善对企业原先的硬件没有任何影响,也不需要进行任何改动,所以成本低廉。除此之外,可以很好地降低网络的通信负荷,而且在这方面的效果显著,不仅解决了企业内部的通信需求,而且也提高了局域网的使用效率,所以越来越受到各界的欢迎。1.2 网络聊天软件的现状及发展相比广域网而言,局域网上的通信软件,无论是从实现原理,还是从功能特性来看,它实现了对通信软件的一种精简2。在人们辛勤的研究下,无论是软件的开发技术还是实现已经得到了很大的改善,他们使用TCP协议的情况少之又少,大部分都是用UDP协议。现在已经出现了很多成熟的即时通信软件,例如:国外的MSN和ICQ,国内的腾讯QQ和新浪UC等。这些成熟的即时通信软件基本都实现了即时聊天,包含文本聊天、语音、视频聊天和文件传输等基础功能,同时还各有各自的特色。因为这些软件产品都是商业软件,其具体的实现技术和实现方式等都属于商业的机密,很多人无法得知其具体的细节。但是从通信软件的原理来看,他们所提供的丰富功能与应用都是基于各种操作系统平台所提供的网络通信接口,所使用的通信协议均为UDP/IP或TCP/IP协议。对于一些通信软件的具体细节,只有很少数人了解,但是却不能停止对它们的研究,因为除了通信的原理,实现采用的协议之外,局域网和广域网上的软件所具备的功能基本上是一样的,对这方面的研究可以对以后的研究带来极大的便利3。在这个互联网向移动化飞速发展的时代,互联网上的及时通信软件向移动化发展的趋势也越来越明显,现在的很多移动通信提供商都设计了更加便捷的及时通信业务,用户可以在手机上安装客户端聊天软件,只要连接上服务器就可以与任意一个安装了此软件的客户进行聊天。即时聊天软件最早的创始人是三个以色列青年,是他们在1996年做出的,取名ICQ。国内的通信工具多种多样,如果按照使用的对象来分的话,可以分为两大类:一类是个人IM,另一类是企业IM,简称EIM。网络即时聊天工具包括我们熟悉的腾讯QQ,微软的MSN,淘宝的阿里旺旺等。当然还有我国已经运行的飞信,但是它却没有腾讯QQ、腾讯微博那么的受欢迎,因为相比其他聊天软件,它进入市场的时间较晚,在知名度上远远比不上原来的通信工具。特别是像IP电话等这些功能比较强大的聊天工具,占据的市场越来越大,使得其他的一些商家不得不采取必要的措施,来抵御这种威胁。1.3 课题研究的意义 随着互联网的不断发展,互联网要担当起通信大任的声音不绝于耳。而即时局域网聊天软件在这个时代应运而生。在网络飞速发展的今天,很多聊天软件加大了世界各地的形形色色的人之间的交流,只要安装了同样软件的用户,只要双方连上网,打开软件,双方就可以任意的进行聊天,如果对方不在线的话,也可以发送消息,只是对方可能只有打开软件的时候,才能接受并回复给另一方。这种网上聊天工具,无论是对个人还是企业都是不可缺少的,与电话、Email相比,聊天软件更具有实时性和有效性。这种聊天软件如果应用于公司内部,可以促进各部门之间的交流,有利于公司更好地发展4。Linux操作系统受到越来越多人的欢迎,因为它代码的开源性。但对于已经习惯Windows操作系统的人来说,Linux系统的操作不够人性化、交互界面不够美观,这给Linux操作系统的普及带来了很大的阻碍。如果在Linux系统上设计一款具有人性化界面的通信工具,对那些使用该操作系统的客户带来的便利是不言而喻的。编写此聊天软件,除了将所学的编程语言实际运用于生活时间之外,还能很好的学习并掌握该操作系统应用程序的开发过程。这次的毕业设计是一个挑战。2 开发平台及技术支持 2.1 开发环境Linux操作系统因为其开源性,可以被各界免费使用和传播,是一种支持多线程、多CPU和多任务、多用户的操作系统。Linux支持32位和64位硬件,它在基于Intel x86系列的CPU计算机上应用较多。这个伟大的系统是由世界各地的成千上万的程序员辛苦设计和实现出来的。他的目的是想设计出高效灵活的、不受任何商品化的版权的制约,让全世界都能够随意的使用那些Unix兼容的产品。Linux的类Unix特性使其可以实现它的全部特性,而且对不同配置、不同体型、不同价格的计算机都应用灵活,还保持着多任务、多用户的能力。文本、语言编辑器和完整的操作系统都包含在Linux软件包里,而且符合POSIX标准,如果想要免费获得的话,必须具有是在公共许可的权限下。2.2 系统实现技术2.2.1网络传输层协议TCP/IP 协议作为一种主要的传输协议,TCP是一种可靠的、面向连接的、基于字节流的通信协议,即在传送数据之前要先建立连接,成功连接后再传输数据,最后释放连接的过程。TCP采用全双工的通信,提供端到端的服务,在采用字节流的方式时也有一定的要求,就是字节流不能太长,否则必须将其分段,然后再传送,除此之外还提供紧急数据传送功能。作为因特网上主要的传输协议,TCP是网络层向应用层提供数据的纽带5。在TCP协议中,假设报文段和确认的丢失是由于网络拥塞造成的,这一假设适用于低误码率、高带宽的有线信道。TCP协议的三次握手(three-way handshake)的建立是通过通过三个报文段来完成的,过程如图2-1所示。图 2-1 三次握手TCP终止一个连接时要经过四次握手,过程如图2-2所示。图 2-2 四次握手TCP在正式收发数据之前,必须和对方建立可靠的连接,因为它是基于连接的协议。UDP是与TCP相对应的协议,但是它却没有TCP的安全性可靠性高,而且是面向非连接的,相对TCP协议连接的建立,它是直接把数据放松出去,而且,对于传送的数据也有要求,一次只能传输较少数据。所以如果客户对程序的可靠性要求高的话,TCP协议是个很好的选择,如果对这方面的要求不是很高6,那两个通信协议都可以选择,视编程人员的喜好而定。这两种协议不仅有成本和传输大小的差异,而且对通信环境的要求也不同,对他们的使用根据情况而定。因为本论文的设计只是实现一些简单的功能,对软件的安全性要求也不是很高,所以TCP或者UDP协议都可以使用。图2-3 协议层2.2.2 Socket网络编程 端口和套接口客户端和服务器端之间的连接是通过Socket套接口进行的,在此之前,客户机通过申请,系统会分配Socket号,然而服务器不用申请就会拥有公认的号,这一点两者有很大的区别,任意用户都可向其发送各种请求。主机上运行的程序,可以使用TCP,也可使用UDP协议,传输层把数据传给对应的应用程序时,需要引入端口和套接口7。一般情况下,我们将Socket分为下面这几种:原始套接口:比较典型的例子是ping命令的编写,这种接口是针对于网络层编程用的。数据报式套接口:这种接口,通常情况下是无连接的,它通常和无连接的UDP服务应用相对应。流式套接口:这种接口是一种面向连接的接口。和数据报式套接口不同的是,它通常是和面向连接的TCP服务应用相对应。我们都知道,在计算机通信网络系统中,TCP网络协议中的网络Socket数据通常用于标识一个连接,它是端口号和IP地址的二者结合,同时,也是一种比较特别的输入、输出端口。事实上,在最初人们提出Socket的接口概念时,主要目的是将这种特殊接口用于Unix操作系统中的。其实,一个快速了解掌握好Socket接口概念的有效方法是通过Unix操作系统来间接学习,也即是通过学习Unix操作系统的输入输出来学习了解Socket接口8。 套接字和套接口地址结构套接字不仅是整形的数字,而且与文件描述符共用一段数值空间,是描述字的简称。一般而言,该套接字是数值最小的整型描述符,并且是系统当前可用的;服务器的端口号是服务器用来监听客户端用的,相当于地址 ,是服务器与客户端之间的重要纽带。套接字之间的连接过程为:客户端请求,服务器监听,连接确认。客户端请求:是指由客户端的套接字发出连接请求,要连接的目标是服务器端的套接字。因此,客户端在连接服务器之前,客户端的套接字必须与他要连接的服务器的套接字进行匹配,匹配成功后就可以向服务器端套接字提出连接请求。服务器监听:其目的是为了让客户端与服务器端时刻保持联系的状态,是指服务器而非客户端的套接字,此时的服务器处于等待连接、不停地监控网络的状态。服务器可同时监听多个端口,当然,在监听之前首先应该将这多个端口与服务器的Socket套接字绑定,这样就应该有多个套接字描述符,然而,其实只要一个线程监听就可以了。 连接确认:是指当服务器接收到或者说监听到客户的连接请求时,它就响应这个请求,进而建立一个新的线程,服务端会对套接字进行描述,这个线程把描述发给客户,当客户确认此描述的时候,就说明连接已经成功建立。然而服务器端套接字继续处于监听状态,监听其他客户端套接字的连接请求。2.2.3 C/S(客户/服务器)模型 C/S模型的基本概念C/S(Client/Server)就是客户端/服务器架构。它属于应用软件系统架构,,充分利用客户和服务器两端的硬件环境的优势,,具体的运算数据的处理、数据表示以及用户接口等功能被放在了客户端, 其他的监听数据库管理等核心程序就放在了服务器端,当只有一个客户端时,对服务器的配置与很多客户时对服务器的配置是差不多的,只不过是多配置几个Socket套接字而已。从而使客户端变得看起来很丰满, 一般称为“胖客户机 ”; 自然而然,服务器端就被称为 “瘦服务器 ”9, 这样的好处是,将总体任务分成了两个模块来实现,大大降低了系统开销。 C/S模型的优缺点优点:C/S结构不仅提高了客户计算机的处理问题能力,而且可以让让客户端先处理工作,然后再交给服务器,其余的工作由服务器完成。对应的优点是客户端响应的速度比较快,具体表现在以下两点:(1) 有利于实现资源共享。网络中的资源具有分布不均匀性,各个不同结点之间的软硬件配置都存在很大差别。相对客户机,服务器无论在硬件配置,还是资源分布上都有优势,但是,两者除了都具有一对多的关系外,还具有相当的运行环境。用户可享用本地或者其他工作站上的资源,实现资源共享。 (2)有利于进程通信的同步。分布式系统中的面临的一个重要的问题就是同步问题。在客户一服务器模型中,每一次通信由客户端进程发起请求,而服务器进程一直处于等待状态,以保证及时响应客户端发出的请求。当客户端发出请求后,服务器端响应客户端请求,并以此实现进程间的同步。(3) 可实现管理科学化和专业化。分层和专业化管理系统中的资源分布的方式,用户可以根据自己的权利参与管理,这样有利于各级管理的科学和专业化。 (4)可快速进行信息处理。一个任务的提出,可以被平均的分布,这是因为C/S结构点对点的运行环境,因此使用此架构时,多个服务器可以同时处理一个用户发出的请求,不仅响应的速速提高了,而且吞吐量也提高了。(5) 具有更好的可扩展性。C/S开放式的结构,可以将原有的软件硬件资源得到很好地保护,这种结构还具有高度的灵活性,不仅保留原有的硬件功能,而且还可以增加硬件资源,并且系统的能力不会有所减弱,两者可单独进行升级,可扩展性极好10。 客户/服务器双层体系结构存在以下几个局限性。(1)缺乏有效的安全性。由于客户端与服务器端直接相连,当在客户端存取一些敏感数据时,由于用户能够直接访问中心数据库,就可能造成敏感数据的修改或丢失。(2)客户端负荷过重。随着计算机处理的事务越来越复杂,客户端程序也日渐肥大。同时由于事务处理规则的变化,也需要随时更新客户端程序,就相应地增加了维护困难和工作量。(3)服务器端工作效率低。由于每个客户端都要直接连接到服务器以访问数据资源,这就使得服务器不得不因为客户端的访问建立连接而消耗大量本就十分紧张的服务器资源,从而造成服务器工作效率不高。(4)容易造成网络阻塞。正如前面所述,客户端的每次访问都要连接服务器,使得网络流量剧增,容易造成网络的阻塞。(5)客户端的正常运行必须具备一定的条件,就是所用的软件必须是客户端专用的软件,并且这些软件安装一次是不能确保一定成功的,在软件进行更新升级时,任何一台客户机都必须进行再次安装,还有,每一台安装过的系统或者破损的电脑硬件被病毒攻击时,都必须再次安装以及维护,并且安装和维护的花销是非常大的,尤其是在专卖店很多的情况下,路程是主要的问题,并不都是工作量所导致的,这些都会费时费力,同时耗费大量的财力。通常情况下对客户端的操作系统也会有所限制。软件都有自己的自适应环境,或许他只适应与win7但不适用于2000、XP甚至是其他的系统,传统的C/S体系结构一般运用开放模式11,而且这些体系结构拥有不同的特征对于各种操作体统来说,这些情况均导致真正有用的开发环境一直没有被提供。在规定的情况下,客户端以及服务器均需要专用的软件来支持而且产品的更新速度特别快,高额的费用并且极低的效率,这些都已近不能适应几百个以上用户的局域网使用。2.2.4 多线程编程多线程编程是网络编程的基础,几乎所有的网络编程都将涉及到多线程数据传输,并且还要实现界面和数据处理互不影响。全局和局部变量是线程的两种基本数据,然而在多线程里,还有线程数据类型12,它就像全局变量一样,在线程内部可以随便调用它,但不能被线程外的其他线程调用。要理解多线程编程就必须从以下几个方面理解:(1)操作系统多任务概念:就是几个运行的任务同时进行。(2)线程和进程的联系和区别进程实际上就是一个运行着的程序,线程是进程的一部分,一个进程可以有多个线程,但是必须有一个主线程,该程序除了拥有自己的堆栈空间之外,还可以创建其它的进程或着线程。然而进程不能获得CPU时间片,只有该进程里的线程才能获得,所以说真正执行代码的是线程而不是进程,进程只能管理线程,管理内存等,同一个进程中的多个线程共享该进程的虚拟空间。(3)如何创建并销毁一个线程在创建一个线程时,必须提前定义一个函数,这个函数并不是随便定义的,他必须是按照线程函数原型的函数,为了让系统知道从哪里开始运行线程,必须将它的地址传送给所创建线程的函数。若创建成功,该函数会返回一个Handle,这个句柄表示了刚创建的线程内核对象,当线程创建成功后,必须调用CloseHandle函数将其关闭,若不关闭该内核句柄,当线程退出后,操作系统并没有销毁线程,会造成资源的浪费,这是因为获取一个实内核句柄就会增加内核使用的计数,只有当该内核对象的使用计数为0时,才会真正的销毁该内核对象,线程也是如此。本论文使用多线程编程有以下理由:(1)相对于进程而言,多任务操作是一种相当节俭的方式。一个新线程的启动,会占据系统空间,系统会建立众多的数据表,来维护它的代码段、堆栈段和数据段,这种工作方式相当的昂贵。因为多个线程使用相同的地址空间,无论是启动花费的时间,还是彼此切换所需的时间,线程总是比进程小得多 13。(2)线程之间简便的通信机制。当不同的进程之间相互传递数据时,他们只能通过通信的方式,而且各自具有独立的数据空间,这种方式不仅费时,而且又非常的不方便。线程却不是这样,在一个进程里的线程之间,数据是可以共享的,任意一个线程的数据可以被任何同一进程里的其他线程所用,当然,共享时也会出现变量不能被两个线程同时修改的问题,特别是当子程序有的数据被声明为静态时,这种状况下,会给多线程程序带来不可恢复的打击,这些在编写多线程时,应该特别的注意。在不与进程比较的情况下,多线程程序作为一种多任务、并发的工作方式,还有以下的优点:(1)提高应用程序的响应。当用户打一个软件时,如果这个软件耗时时间过长,键盘、鼠标和菜单都不会响应该操作,但是使用多线程技术时就大不同了,它会将耗时时间长的操作置于一个新的线程,不会影响其他的操作,避免了上述情况的发生,充分体现了多线程技术的优点。(2)使多CPU系统更加有效。大部分操作系统会有下列行为,当线程数小于CPU数目时,保证不同的线程运行在不同的CPU上。(3)改善程序结构。可以将一个很长且复杂的进程,分为多个独立运行的线程,这样对于程序的理解和修改意义重大。2.2.5 文本文件的传输Linux的文本文件传输系统,主要是基于TCP/IP协议的,主要实现模块是服务器和客户端,这两个模块的基本功能是一样的,除此之外,还有值得称赞的功能,就是支持断点续传的功能,还可以用函数实现对数据的加密处理,以便数据可靠地传输。可以说,在Linux操作系统中,文件代表了一切,所以文件函数可以对其他设备进行任意的操作,这些文件函数有读与非读函数。用户可以用fseek(SEEK_END)函数来实现文件值的大小,还有重要的函数如fopen()、fread()、fwrite() 、fclose(),这些函数都是标C文件读写函数。还有重要的文件读写函数,open()、 read() 、write()、 close() 、ioctl(),它们都是必不可少的系统函数。还有一点值得注意的是,文件是通过管道传输来实现文件的传输的。应用Symlink函数可以创建软链接文件,而open函数无法直接读取软件链接文件,readlink函数却可以直接读取,并不要求目标文件已经存在,也并不需要位于同一个文件系统中。2.3 系统设计框架 整个应用程序要实现聊天及文本文件传输的功能,主要由三大块组成: (1)人机交互界面:用于显示客户服务器连接的状态、是否实现消息的输入、消息的正确传送等功能; (2)消息传输模块:用于实现消息传输协议的封装与解包工作,实现消息传输控制; (3)文本传输模块:用于实现文本文件的传输的封装还有解包工作,实现文件头及文件的发送、接收控制14。3软件需求分析及可行性研究3.1需求分析3.1.1时间要求本项目作为大学本科毕业设计题目,从接受选题开始,在大四下学期的第一、二周要完成资料的准备工作;第三、四周完成开题报告、文献综述,并经指导教师审批;第四到七周完成毕业设计大纲和各个部分的主要内容;第八周完成并将毕业设计学生自查表交系里;第九到十三周全面完成系统和论文;第十四周交设计并请指导教师评审,评阅人评审,准备答辩。3.1.2 功能需求分析本论文的设计要实现的功能是:服务器的程序要先于客户端的程序启动,就像登录QQ聊天一样,只有系统先连接上宽带,用户才能登录聊天。程序启动之后要能够知道局域网内哪些用户在线,并可以随时与任意一个客户端进行通信;下面,我们就局域网聊天的一般过做一个简单的介绍。在我们局域网聊天用户使用者进行局域网聊天时,首先,我们要选择局域网聊天界面进行上线登陆,登陆之后,相对应的服务器会马上更新信息,如果你允许别人知道你上线的话,服务器还会同时告知其他正在使用该软件的用户你已上线。接下来,如果你想和其他人进行聊天的话,你可以双击用户列表中的相对应的消息框窗口,弹出消息框就可以给他人编辑消息发送了,与此同时,在对方那里会弹出你所发的消息框,并在相应的界面处显示你的消息,整个聊天局域网的的主要过程就是这样。我们都知道,当我们在使用一个软件时,通常情况下,我们是需要进行一个基本信息注册的。比如用户名、密码、邮箱等等这些信息。事实上当我们在对这些信息进行注册时,局域网服务器也在后台进行相应的用户信息保存操作。总之,前台客户端的操作是和后台服务器的运行是同时进行的,二者是一体化的。在局域网聊天过程中,我们需要注意的是,当我们启用客户端之后,客户端是否已成功启动,对于这个问题,我们可以通过查看服务器是否在线的方法来判断客服端是否已登陆成功,如果服务器不在线,则客户端未成功登陆;如果服务器显示已在线,则客户端已成功登陆。在局域网聊天过程中,服务器和客户端的是否下线判断是通过以下方法进行的,若客户端在一定时间内没有收到服务器端消息,则视为服务器已下线;若客户端在一定时间内未向服务器端发送信息,则视为客户端已下线15。图 3-1 系统工作流程图3.1.3 运行需求分析linux操作系统具有vi、gcc、g+等编译器,用这些编译器所设计的软件,成功运行时,服务器负责接收和处理客户端的数据信息请求,并向客户端发送消息,消息包括登陆者的姓名,说话的内容,以及登录和退出的提示等,客户端可以访问、接收并显示服务器发来的内容。这样将一个系统分为两个独立的部分进行设计,便于软件的开发。而且也把一个软件的功能交给两个部分去完成,则更加有效的利用了系统资源。3.1.4 性能需求分析在程序运行之前,要尽可能多的想到可能会发生的故障,尽量提前做好应对措施,当发生故障时要向用户提示清晰明白的信息,因此要求程序尽可能可靠,当系统发生问题时,比如网络初次不能成功连接、信息不能成功发送给对方、文本文件不能成功接收、聊着时对方突然离线等等,程序应该能够及时应对这些问题。当某一个用户进行不当的操作时,或者系统出现问题时,为了避免软件出现假死现象,要求客户程序能够响应并及时的退出。在编写程序时,应该有必要的解释文字,程序的编写也要规范,这样方便查看,也适合别人接手后很好地理解程序的思路,如果以后还想对此开发软件进行完善的话,上述是很有必要的。编写的程序也要有较强的适应性,在不同配置的计算机上都能够运行,在运行时,要占用内存小,响应速度快,不会影响系统内其他软件的运行,软件尽可能的采用模块式的开发,模块之间尽量不要有太多联系,一个模块完整的实现一个内容,这样才能易于软件的维护和扩展。3.2 可行性研究成本问题是此开发软件本考虑之外的事情,由于在软件设计之前,已经做好了需求分析以及充分的前期准备工作。确定了本程序的平台为linux操作系统,将要使用TCP协议socket网络编程进行通信,此程序的开发工具为Vi。而Vi在linux系统下的开发能力是有目共睹的。此程序在开发的技术可行性上是完全行得通的。4 总体设计4.1 体系结构设计一般的通信设备均采用的是C/S体系结构即客户机/服务器,C/S结构就是包含一个客户机或者服务器的结构,客户机主要就是对服务器上的数据进行访问或者进行处理,服务器则主要将请求的数据进行接受并且处理。有时候,一个服务器可能会接受到多个客户机发来的请求,这种情况下就需要服务器来判断如何处理。C/S结构是目前被广泛使用的一种结构。尤其是在当今网络技术蓬勃发展的情况下,很多系统都采用这种结构,该结构最大的好处就是有客户机以及服务器来公共完成计算机的任务,这使得系统的资源得到充分利用。而且,任何客户机都可以在服务器将资源全部集合起来的时候获取所需要的信息。C/S结构就是一种发送请求,并且进行处理及应答的过程,客户及发出一个请求,服务器接受请求并且进行处理,然后返回给用户处理的结果。当客户机没有发出请求时,进程就相当于一直处于休眠状态。当客户发送请求时,服务器才被唤醒,对发送的信息进行处理,并且将处理的结果返回给客户机。当客户端得到本地广播地址后,就会查找服务器,服务器接收到改地址后,就会返回服务器的地址,客户端进行记录。客户端启动定时器后就会向服务器发送信息。在客户端与服务器进行数据交换,拥有了在线用户列表后,就可以选择IP进行客户端之间的点对点信息交换了。若服务器不在线的话,客户端程序会通信用户,给其信息提示,用户在一定的时间内退出。4.2 功能模块划分根据系统程序的设计,还有对体系结构的分析,对此聊天软件设计进行了以下的模块划分,如图4-2所示:图 4-1 功能模块图网络的初始化是有一定条件的,就是主线程模块对其的初始化,主线程启动两个子线程,这两个子线程就是监听线程和扫描线程,了解网络的分布、填充有关数据都是由网络扫描模块来完成的,扫描模块主要进行网络扫描,它是由主线程启动的,网络扫描的目的是检查用户的在线状态。而数据的接收和发送是通信的两个模块,是由网络事件来触发的,输入输出模块是用来响应消息的,来显示一个用户向另一个用户发送的消息。5 详细设计与编码实现 5.1 服务器编码实现及结果显示/准备通信地址struct sockaddr_in addr;/网络通信的地址信息addr.sin_family = PF_INET;/协议簇addr.sin_port = htons(PORT);/端口addr.sin_addr.s_addr = inet_addr(IP);/IP地址结构体/绑定socket和通信地址if(bind(sockfd,(SA*)&addr,sizeof(addr)=-1)perror(绑定失败);printf(服务器启动失败n);exit(-1);printf(成功绑定n);/设置监听if(listen(sockfd,100)=-1)perror(设置监听失败);printf(服务器启动失败n);exit(-1);printf(设置监听成功n);printf(初始化服务器成功n);/等待客户端连接和通信部分写到另一个函数中图5-1 服务器的启动 以上程序主要是通信地址的设定、通信的绑定以及监听。主要的目的就是为了启动服务器。程序运行的结果如图5-1所示。void sendMsgToAll(char * msg)/用来分发消息的函数 int i=0;for(;i0)/接受到名字strcpy(,name);m_id = size;size+;/进入线程之后,先群发一条提示,提示某某客户端连接上来char tishi100=;/sprintf(tishi,0331;32;41m热烈欢迎 %s 登录本聊天室.0330m,);sprintf(tishi,热烈欢迎 %s 登录本聊天室.,);图5-2 局域网聊天 因为编写此程序是为了实现一个局域网聊天,局域网聊天室最大的特点就是可以把每个人说的话所有人可见,在发送的时候主要使用的是消息队列,客户端向消息队列里存储数据,服务器从消息队列里取出数据并发送给所有客户端。因此此段程序的主要目的就是把所有人的数据发送给所有的端口让所有人可见。图5-2是程序运行后显示的结果。printf(fd=%dquitn,fd);/recv函数返回小于0,则/表示有客户端断开,打印quit/之后将退出的客户端的socket描述符重新置成0int i;for(i=0;ifd=%dquitn,fd);/打印fd-quit退出char msg100=;/sprintf(msg,0331;40;32m欢送 %s 离开聊天室,再见.0330m,);sprintf(msg,欢送 %s 离开聊天室,再见.,);/将退出消息发给所有聊天的人图5-3 登录与退出 当每个人登录的时候应该通知大家,当每个人退出的时候也应该通知大家,并且在退出的时候应该结束对此客户端处理的线程,图5-3就是实现了此代码后的功能显示。sendMsgToAll(msg);/将这些内容写到一个函数中return ;/某客户端退出之后,结束线程/正确读到数据之后if(strncmp(buf,TF,

温馨提示

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

评论

0/150

提交评论