局域网即时通讯系统的研究与实现_第1页
局域网即时通讯系统的研究与实现_第2页
局域网即时通讯系统的研究与实现_第3页
局域网即时通讯系统的研究与实现_第4页
局域网即时通讯系统的研究与实现_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

局域网即时通讯系统的研究与实现(仿QQ聊天系统)摘要:互联网时代的到来,开启了人们新世界的大门,各种各样的电子科技产品涌入市场,进入人们的日常工作和生活中,是人类的生活生产方式都发生了巨大的变化。顺应时代发展的需求,即时通讯IM(InstantMessaging)也就出现在大众视野中,成为了当前最热门的通信方式之一。即时通讯与传统的通信方式,例如古代的飞鸽传书、近代的电报送信以及更接近的电话短信通信等相比较,即时通信占有相当的优势,在人力资源方面,传统的通信方式,需要的人力、财力都相对较高,古时候要有专门的信使骑马驾车千里送信,需要很多的人力资源支持;在时间效率方面,即时通信拥有更加快捷、更加高效和更加准确的优势,传统的方式送一份书信最长的可能需要一月有余,即使是打电话发信息,也需要几分钟时间才能接收到相关信息。但是即时通信可以做到秒回。在信息安全方面,即时通信可以做到传递完成后销毁信息,且在很短的时间内完成,而传统的书信存在很多不可预测的风险。所以总结的讲,即时通讯具有实时性、高效性等优点。本文主要提出一种仿照QQ的具有客户端和服务器端基于局域网的即时通信系统,利用网络通信原理和socket套接字等技术,服务器端主要负责监听连接请求、建立连接、实时通信等,而客户端则是发送连接请求、建立通信等等,利用TCP协议提供可靠的数据传输服务。TCP是网络应用中最为广泛的一种传输层协议,TCP为应用程序提供可靠的数据传输服务,是操作系统的一个主要组成部分,但是对于一个编程人员而言,TCP是不可见的,必须通过套接字编程接口才能够使用。还涉及到API技术,API是一组访问基于Internet的服务或应用程序的标准和说明。大多数API是由服务提供商设计的,并为如何与特定服务交互提供指导,API通常负责很多繁重的工作,无论是在移动和数字世界,API几乎负责现代用户所做的一切。还使用到第三方技术Netty,Netty是一个基于nio的客户、服务器端编程框架,Netty提供异步的,事件驱动的网络应用程序框架和工具,可以快速开发高可用的客户端和服务器。MyBatics也是这个项目的关键技术,MyBatis本来是apache的一个开源项目iBatis,2010年的时候,这个项目由apachesoftwarefoundation迁移到了googlecode,并且将名字改为MyBatis,在2013年11月又迁移到Github,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQLMaps和DataAccessObjects关键字:即时通讯;Socket编程;API技术;Netty技术。ResearchandImplementationofInstantMessagingsystemAbstract:thearrivaloftheInternetera,openedthedoortopeople'snewworld,allkindsofelectronictechnologyproductsintothemarket,intoPeople'sDailyworkandlife,isthewayoflifeandproductionofhumanbeingshaveundergoneagreatchange.InlinewiththeneedsofthedevelopmentofTheTimes,InstantMessagingalsoappearsinthepublicvisionandhasbecomeoneofthemostpopularcommunicationmethods.Instantmessagingwithtraditionalcommunicationmethods,suchasflyingpigeoninancientbooks,moderntelegraphmessengerandclosertothetelephonemessagecommunication,suchasinstantcommunicationoccupiesaconsiderableadvantage,intermsofhumanresources,thetraditionalcommunicationmode,needmanpower,financialresourcesarerelativelyhigh,theancienttimestohavespecialmessengeronhorsebackdrivingdistancesmessenger,needalotofhumanresourcessupport;Intermsoftimeefficiency,instantmessaginghastheadvantageofbeingfaster,moreefficientandmoreaccurate.Thetraditionalwayofsendingalettermaytakelongerthanamonth,andevensendingamessagebyphonemaytakeseveralminutestoreceivetherelevantinformation.Butinstantmessagingcanbedoneinseconds.Intermsofinformationsecurity,instantmessagingcandestroyinformationaftertransmission,anditcanbecompletedinaveryshorttime,whiletraditionallettershavemanyunpredictablerisks.Soinsummary,instantmessaginghastheadvantagesofreal-time,highefficiencyandsoon.Inthispaper,weputforwardakindoflikeQQhasclientandserverofinstantmessagingsystembasedonLAN,usingthenetworkcommunicationprincipleandthesocketsockettechnology,suchastheserversideismainlyresponsibleformonitoringconnectionrequest,establishconnections,suchasreal-timecommunication,andtheclientissendingaconnectionrequest,establishcommunication,etc.,useofTCPprovidesreliabledatatransferservice.TCPisoneofthemostwidelyusedtransportlayerprotocolsinthenetwork.TCPprovidesreliabledatatransmissionserviceforapplicationsandisamajorpartoftheoperatingsystem.However,foraprogrammer,TCPisinvisibleandcanonlybeusedthroughthesocketprogramminginterface.ItalsocoversAPItechnologies,whichareasetofstandardsandinstructionsforaccessinginternet-basedservicesorapplications.Mostapisaredesignedbyserviceprovidersandprovideguidanceonhowtointeractwithaparticularservice.Apisareoftenresponsibleforalotofheavywork,whetherinthemobileordigitalworld,andareresponsibleforalmosteverythingmodernusersdo.Nettyisaniobasedclientandserversideprogrammingframework.Nettyprovidesanasynchronous,event-drivennetworkapplicationframeworkandtoolsfortherapiddevelopmentofhighlyavailableclientsandservers.MyBatisisalsothekeytechnologyofthisproject.MyBatiswasoriginallyanopensourceprojectofapacheiBatis.In2010,thisprojectwasmigratedtoGooglecodebyapachesoftwarefoundationandchangeditsnametoMyBatis.ThepersistencelayerframeworkprovidedbyiBATISincludesSQLMapsandDataAccessObjects.Keywords:instantmessaging;Socketprogramming.APItechnology;Nettytechnology。

目录1引言 71.1课题研究的背景 71.2该系统设计的意义 82理论技术基础概述与开发环境 82.1即时通信的工作原理 82.2开发技术概述 102.2.1开发语言 102.2.2开发技术 112.3开发工具及运行环境 123系统的结构设计 123.1可行性分析 123.1.1从用户需求分析可行性 123.1.2从功能作用分析可行性 133.1.3从使用寿命成本分析可行性 133.2开发需求描述 133.3系统架构设计 133.4系统模块功能设计 143.4.1服务器端 143.4.2客户端 153.5数据库的设计 163.5.1分组表(friendgroup) 163.5.2好友表(friends) 163.5.3用户表(user) 174系统的具体部分实现过程 174.1通信编码实现过程 174.2系统运行效果图 184.2.1登陆界面 194.2.2查找好友界面 194.2.3好友聊天界面 204.2.4好友分组界面 205系统测试与运行 205.1服务器端 205.2客户端 21结论 22致谢 23参考文献 23声明 24

1引言随着计算机网络技术的飞速发展,以TCP/IP(TransmissionControlProtocol/InternetProtocol)网络技术为核心的因特网已经从成为支撑现代社会运行的基础设施之一,深入的了解网络通信原理、了解网络协议工作细节都是必不可少的生活技能。然而计算机网络技术复杂而且抽象,想要具体的了解与掌握,必须花费大量的心血与努力,多读书、多练习、多实践才能掌握其中的奥妙,常人言:实践出真知,学习计算机更加要不断的摸索,不断的修改bug发现问题和解决问题,才能不断的进步。本文就简单的利用网络通信原理,讲述了怎样建立客户端与服务器端之间的通信过程,简单的概述了TCP协议的工作原理;socket套接字的作用;以及数据库的搭建等。由于能力有限,所以呈现出来的内容上还有很大的提升空间与不足之处,希望能在今后的学习中有所提高。当前市面上最流行的即时通讯工具有腾讯的QQ,是由深圳腾讯计算机开发出来的聊天工具,我本次的研究主要就是效仿QQ的相关功能,但是并没有完全的做到QQ的功能,但是也具有参考价值。本分分为五大模块,分别从开发背景需求分析、开发原理基础理论知识、开发环境实现过程、系统架构设计和系统测试运行等方面阐述了一个即时通讯聊天的设计与开发过程,由于知识能力有限,实现的功能较少,不足之处,还请各位谅解。1.1课题研究的背景人们出次接触到的即时通讯,是在1996年由三个犹太小伙子做出来的ICQ,据说之所以叫ICQ是取自英文“Iseekyou”,即使是这样一个简单的通信工具,在当时也掀起了人们对即时通讯的热情,引发了即时通讯的热潮,在人群中快速流行起来,尤其是对于年轻人来说,使用者非常之多。此时国内趁着这股热潮,腾讯公司研发了腾讯QQ,时至今日,即使微信的用户也相当多,但是腾讯的QQ依然占据着市场,尤其是中小学生、公司员工、学校老师等都还在使用QQ,因为它具有便捷快速的信息交流,文件传输更是方便,文件大小不受限制,同时现在的QQ还有很多适合办公的功能,很符合现在年轻人的工作模式需求,在此基础又有很多放松的娱乐项目。在此背景基础上,本次论文研究一种基于局域网的即时通讯聊天系统。就目前国内外的动态趋势而言,国内外市场上做即时通讯系统的公司数不胜数,国内有腾讯QQ、微信、新浪微博、网易泡泡等,国外也有著名的MSN以及跨平台的Gaim等。就技术而言本次采用的是sun公司的Java语言,该语言有多线程、网络流、异常捕捉处理、安全跨平台等优点。下面具体解释多线程、流和跨平台的优点。多线程:多线程编程技术是Java语言的重要特点。多线程编程的含义是将需要完成的程序任务划分成几个并行的子程序任务。这种多线程的工作模式特别是在网络编程中经常使用到,你会发现很多功能是可以并发执行的,比如网络传输的速度比较慢、用户输入的速度比较慢,此时你可以用两个独立的线程去完成这两个功能,而不影响你正常的显示或其它功能进行。多线程是与单线程比较而言的,普通的Windows采用单线程程序结构,其工作原理是:主程序有一个消息循环,它不断从消息队列中读入消息,用来决定下一步所需要做的任务,一般情况下是针对一个函数,只有等这个函数执行完之后,主程序才能接收另外的消息来执行。比如子函数功能是在读一个网络数据,或读一个文件,只有等读完这个数据或文件才能接收下一个消息。在执行这个子函数过程中你什么也不能干。但往往读网络数据和等待用户输入有很多时间处于等待状态,多线程利用这个特点将任务分成多个并发任务后,就可以解决这个问题。流的概念:Java中对文件的操作是以流的方式进行的。流是Java内存中的一组有序数据序列。Java将数据从源(文件、内存、键盘、网络)读入到内存中,形成了流,然后将这些流还可以写到另外的目的地(文件、内存、控制台、网络),之所以称为流,是因为这个数据序列在不同时刻所操作的是源的不同部分。Java流的分类比较丰富,例如输出流、输入流、字节流、字符流、对象流、缓冲流、分节点流和处理流等等,按照不同的划分方式,有很多不同的流。跨平台:跨平台时Java最大的一个特点,Java有虚拟机,程序编译之后可以在windows、Linux等操作系统上运行,用虚拟机解释执行,不依赖平台,其实,简单的理解就是Java是在各种平台之上建立起属于他自己的平台,也就是所谓的JVM(Java虚拟机器)再用JVM来执行他的类。1.2该系统设计的意义随着社会的发展,现在人们的工作生活都离不开网络,人人都有一个手机,网上即时通信是当前普遍的交流方式,传统的书信交流基本已经被时代抛弃。即时通信系统的研究是非常必要的,相对于书信那样慢长且不方便的交流方式,这个快速的时代下的人,更倾向于即时通讯这样具有实时性的交流方式。对于一些腼腆不善言辞的人来说,网络通信更加有助于他们表达自己的内心。不论社会进步到何种地步,人与人之间的交流沟通都是必不可少的,家人朋友通过交流沟通了解不在一处的彼此的近况,联络感情;同学朋友通过交流沟通分享喜怒哀乐,加深感情;老师同学、老板员工通过交流沟通相互学习,分发完成相关任务。所以一个即时通信聊天系统能够很好的完成扮演这样一个沟通桥梁,让人与人之间的通信变得快捷、便利、高效。从社会需求上来讲该系统的研究设计是很必要的。于我本人而言,也通过研究该即时通讯系统,更叫了解网络通信的基本原理、锻炼编程能力、提升专业知识水平和解决问题的能力等。所以我觉得该系统的设计研发意义重大。2理论技术基础概述与开发环境2.1即时通信的工作原理在设计开发即时通讯系统前,我们必须要先了解网络通新所具备的知识,例如网络通信的基本原理、网络通信中网络协议的作用,是如何进行通信的。同时我们需要了解TCP/IP协议和Socket的关系,TCP/IP是一个协议栈,用来定义网络的运行机制,如果要用程序来具体实现TCP/IP协议的功能,就你徐使用TCP/IP协议对外提供的一个编程接口,二Socket就是TCP/IP协议提供的一个编程接口。TCP是一个面向连接的传输层协议,提供了可靠的字节流传输服务,TCP为了维护传输的可靠性,增加了许多开销,例如确认流量控制、计时器以及连接管理等。TCP协议传输的特点主要有:端到端通信、可靠的链接、可靠的交付、双工传输和流模式。TCP服务器端的编程步骤如下:加载WinSock动态链接库;创建套接字,并将第二个参数设置为监听状态;绑定套接字到一个IP地址和端口上;将套接字(socket)设置为监听模式等待连接请求;请求到来后,接受链接请求,返回一个新的套接字;用返回的套接字与客户端进行通信;返回等待另一个请求连接;关闭套接字,关闭加载的套接字库。IP(InternetProtocol)协议的英文名直译就是:因特网协议。从这个名称我们就可以知道IP协议的重要性。在现实生活中,我们进行货物运输时都是把货物包装成一个个的纸箱或者是集装箱之后才进行运输,在网络世界中各种信息也是通过类似的方式进行传输的。IP协议规定了数据传输时的基本单元和格式。如果比作货物运输,IP协议规定了货物打包时的包装箱尺寸和包装的程序。除了这些以外,IP协议还定义了数据包的递交办法和路由选择。同样用货物运输做比喻,IP协议规定了货物的运输方法和运输路线。TCP协议提供了可靠的面向对象的数据流传输服务的规则和约定.TCP/IP协议采用分组交换的方式进行数据传输,分组交换通俗的讲就是将要传输的数据划分成不同的数据段,每一个数据段又称之为数据包,TCP将数据分成若干个数据包,并给他们编上不同的序号,方便收到数据的一方确认和复原;然后IP协议给每个数据包协商发送主机和接受主机的地址,再利用路由算法选择路由,数据就可以在往里网上传送了,IP协议主要负责数据的传输工作,而TCP主要提供数据传输的可靠性,两大协议相互配合,完成数据的传输服务。互联网协议按照不同的功能需求分为tcp/ip四层或tcp/ip五层或osi七层,如下图:表示层应用层应用层应用层表示层应用层应用层应用层会话层会话层传输层传输层传输层传输层传输层传输层网络层网络层网络层网络层网络层网络层 数据链路层数据链路层数据链路层数据链路层网络接口层网络接口层物理层物理层物理层物理层各层之间关系以及常用的物理设备,如下图所示:2.2开发技术概述2.2.1开发语言Java语言:Java是由SunMicrosystems公司推出的Java面向对象程序设计语言(以下简称Java语言)和Java平台的总称。由JamesGosling和同事们共同研发,并在1995年正式推出。Java最初被称为Oak,是1991年为消费类电子产品的嵌入式芯片而设计的。1995年更名为Java,并重新设计用于开发Internet应用程序。Java语言有跨平台、动态web、Internet计算等优点。而且Java语言是相对好学,容易理解的一门计算机语言,也具有相应整齐标准化的代码格式,容易掌握,容易看懂。项目中很多jar包都可以在之前的类似项目中找到,可以很大程度上重复循环使用,减少工作量。2.2.2开发技术(1)Socket编程技术Socket编程一种独立于协议的网络编程接口,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。(2)Netty技术Netty是由JBOSS提供的基于JavaNIO的开源框架,Netty提供异步非阻塞、事件驱动、高性能、高可靠、高可定制性的网络应用程序和工具,可用于开发服务端和客户端。之所以先择Netty作为基础的通信组件,是因为它是一个高性能事件驱动,可以确保快速简单的开发一个网络应用。它吸收了很多种协议的实现经验,这些协议包括FTP,SMTP,HTTP,各种二进制的文本协议,并且经过了相当精心设计的项目,最终,Netty成功的找到了一种方式,在保证易于开发的同时还保证了其应用的性能,稳定性和伸缩性。(3)MyBatics技术MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatics消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。用xml文件构建SqlSessionFactory实例是非常简单的事情。它具有简单易学、灵活使用、解除了SQL与程序代码的耦合、提供映射标签、提供xml标签和支持写动态SQL等优点。它的功能架构包括API接口层、数据处理层和基础支撑层。(4)JSP技术JSP(全称JavaServerPages)是由SunMicrosystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。(5)客户端/服务器模式Client(客户端)与Server(服务器)的模式通常是,客户端和服务器分别在两台不同的设备上,客户端程序主要负责将用户的需求提交给服务器程序,再将服务器程序接到请求后的反应以特定的形式反馈给用户;而服务器程序的主要责任是接受客户端程序的服务请求,并给出相应的处理结果且将结果返回客户端。在这个应用模式中,用户只关心完整地解决自己的应用问题,而不关心这些应用问题由系统中哪台或哪几台计算机来完成。它的特点是:可快速进行信息处理。由于在C/S结构中是一种基于点对点的运行环境,当一项任务提出请求处理时,可以在所有可能的服务器间均衡地分布该项任务的负载。这样,在客户端发出的请求可由多个服务器来并行进行处理,为每一项请求提供了极快的响应速度和较高的事务吞吐量。可实现资源共享。C/L结构中的资源是分布的,客户机与服务器具有一对多的关系和运行环境。用户不仅可存取在服务器和本地工作站上的资源,还可以享用其他工作站上的资源,实现了资源共享。(6)JDBC数据库技术JDBC,全称为JavaDataBaseConnectivitystandard,它是一个面向对象的应用程序接口(API),通过它可访问各类关系数据库。JDBC也是java核心类库的一部分。JDBC的最大特点是它独立于具体的关系数据库。JDBC工作原理主要分3个步骤:加载数据库驱动、获取数据库连接、发送sql语句访问数据库。2.3开发工具及运行环境①硬件环境:处理器:InterPentiumPⅢ(或者更高的处理器);内存:256MB或者更大的内存;网络:局域网②软件环境:操作系统:Windows XP/Windows 10;开发语言:Java语言开发软件:JDK1.8、Eclipse、NavicatPremium12、Tomcat、数据库:mysql5.5运行环境:配置CPU2G以上,内存512以上,运行平台基于Windows平台。客户端需要安装java虚拟机,同时还要有JICQ的客户端程序。3系统的结构设计3.1可行性分析3.1.1从用户需求分析可行性首先,对于当代的大多数人来说,即时通讯是生活在互联网时代必不可少的需求,即时通讯不仅仅在工作中起了关键性的作用,例如远程管理公司,例如疫情期间工人都在家办公,这时就很需要一个即时聊天系统来进行的工作中的交流。生活中更加需要即时通信,无论是朋友亲人间的日常交流,还是远方亲朋好友都需要这样一个时发时收的交流工具,分享生活中的点点滴滴,即时在家隔离也能了解外面世界。所以从需求上,研发这样即时通讯聊天系统是非常有必要和可行的。3.1.2从功能作用分析可行性该系统完成了最基本用户登录注册功能、好友与好友之间的聊天功能、查找好友功能和群聊天功能。这些简单的功能就可以完成日常生活中简单的沟通,具有时效性,便捷性等。如果时间充裕在此基础上还可以完成更加复杂的功能,例如视频会话功能、文件传输功能、发送表情包功能和开发简单的娱乐小程序等功能。所以就功能而言,该聊天系统的研发是可行的。3.1.3从使用寿命成本分析可行性一个即时聊天系统从开发到投入使用大概最多用到一月有余,可以使用的生命周期则是以年为计量单位的,只要做好后期的运维工作,不断地更新提高,可以长此以往的使用下去,不存在消耗、磨损、老化等问题。所以基本做到了一次性投入,长时间回报。例如像腾讯的QQ就已经流行十几年了,不断地完善功能,所以即时聊天系统从这一点上来肯也是非常值得开发的。3.2开发需求描述互联网的飞速发展,人们之间利用互联网相互沟通,信息交流的实时性越来越重要,传统的电子邮件交流形式已经不能满足人们的通信需求,所以研发一款类似于腾讯QQ这样的可以实现登录注册、好友管理、好友聊天和群聊天功能的即时通信系统是非常必要的。3.3系统架构设计本次采用的是C/S(Client/server)模型,这是一种最常见也是最基本的一种通信模式,需要说明的是,这里的客户端和服务器是指通信过程中的应用设备,而不是计算机。在此模型下,发出通信请求的一端称为客户端,接收请求通信的一方叫服务器端,这是一种进程间服务于被服务的关系,通常多个客户机与服务器运行在不同的设备上,但是两者也可以运行在同一台计算机上,因为本次课题的研究是处于产品的研发阶段,在同一台设备上运行很常见。客户软件一般不需要特殊的硬件内环境和很复杂的操作系统,而服务器软件一般需要清大的硬件和高级的操作系统,主要是客户机一般都是针对于一个用户,为一个用户提供服务,而服务器则要同时并发处理很多本地或者远程的的客户请求,为多个用户提供服务,所以需要性能好的软硬件。这种模式的缺点在于,当用户数量庞大时,服务器需要提供的网络接口和计算机资源数据庞大,会给计算机服务器网络瓶颈,导致网络流量分配不均等问题。本次课题研究特点之一,使用spring管理各种组件,spring就像是一个巨大的容器,我们把需要的组件,放到spring这个容器中,使用时用@Resource,@Autowired从容器里取出对象即可。若某个对象本来并没有放进spring中,想要拿spring中的组件则只能通过spring容器的上下文环境里获取对象,通过spring与mybatics的结合,进行数据连接。基本就是使用Netty作为通信网关,Java开发客户端的所有界面,用spring作为IOC容器。3.4系统模块功能设计3.4.1服务器端服务器端在整个通讯过程中,只需要保证服务器开通,监听是否有客户端发来的连接请求,接受请求并给客户端一个同意建立连接的信号即可。一台服务器可以对多个客户端,他们之间是一对多的关系。

3.4.2客户端①用户登录模块登录模块主要的功能就是判断,判断账号是否存在,若账号不存在,则需要注册账号;判断密码账号是否匹配,若匹配则可以登录,若不匹配则需要重新输入密码。关系如下图所示:②好友聊天模块3.5数据库的设计3.5.1分组表(friendgroup)字段数据类型字段描述是否为主键g_idint1、2、3主键g_namevarchar分组名主键useridvarchar用户主键3.5.2好友表(friends)字段名数据类型字段说明描述FriendidVachar(50)好友名称主键GroupinVachar(50)所在分组主键RemarkVachar(50)好友备注主键3.5.3用户表(user)字段 数据类型描述IDint主键pwdvarchar密码namevarchar姓名sexvarcha性别Signaturevarchar个性签名NickNamevarchar昵称4系统的具体部分实现过程4.1通信编码实现过程publicclassAppTest//创建AppTest类

extendsTestCase

{

/**

*Createthetestcase

*

*@paramtestNamenameofthetestcase

*/

publicAppTest(StringtestName)

{

super(testName);

}

/**

*@returnthesuiteoftestsbeingtested

*/

publicstaticTestsuite()

{

returnnewTestSuite(AppTpublicMainDialog(){super(newjavax.swing.JFrame(),false);initComponents();}publicMainDialog(java.awt.Frameparent,booleanmodal){super(parent,modal);initComponents();initUserList();}privatevoidinitComponents(){this.setSize(280,630);this.setMinimumSize(newjava.awt.Dimension(280,530));}publicclassServerStartupimplementsCommandLineRunner{

privateLoggerlogger=LoggerFactory.getLogger(getClass());

privatestaticConfigurableApplicationContextcontext;

privatestaticList<ServerNode>serverNodes=newArrayList<>();

publicstaticvoidmain(String[]args)throwsException{

SpringApplicationapp=newSpringApplication(ServerStartup.class);

app.setBannerMode(Banner.Mode.OFF);

app.run(args);

}#socket服务的ip地址

socket.serverIp=

#socket服务的端口

socket.port=8088

#http后台的端口

http.port=100864.2系统运行效果图4.2.1登陆界面在已经拥有账号的情况下我们可以直接输入账号密码登录,如下图所示如果是新用户则可以先选择注册账号,再进行登录,如下图:4.2.2查找好友界面4.2.3好友聊天界面4.2.4好友分组界面5系统测试与运行5.1服务器端①创建服务器:publicclasssever{ //一个服务器 privateServerSocketserverSocket; //privateArrayList<Socket>socketlist=newArrayList<Socket>(); //所有客户端 privateArrayList<User>userlist=newArrayList<User>();②开始对话工作publicstaticvoidmain(String[]args){ severs=newsever(); s.talk(); }}③制造ServerSocket,对客户端进行接收

privatevoidcreateServerSocket(){…}publicvoidstartService(){

while(true){

s=ss.accept();

newChatRoomServerThread(s).start();

}

}在运行服务器端程序时,我们先开启服务器(先运行服务器端程序),将监听套接字调整为监听状态,当出现“服务器已经启动,正在监听客户请求…”如图:5.2客户端①与服务器建立连接publicvoidstart(finalStagestage)throwsIOException{

//与服务端建立连接

connectToServer();

StageControllerstageController=UiBaseService.INSTANCE.getStageController();

stageController.setPrimaryStage("root",stage);

StageloginStage=stageController.loadStage(R.id.LoginView,R.layout.LoginView,

StageStyle.UNDECORATED);

loginStage.setTitle("QQ");

stageController.loadStage(R.id.RegisterView,R.layout.RegisterView,StageStyle.UNDECORATED);

StagemainStage=stageController.loadStage(R.id.MainView,R.layout.MainView,StageStyle.UNDECORATED);②主界面Screenscreen=Screen.getPrimary();

doublerightTopX=screen.getVisualBounds().getWidth()*0.75;

doublerightTopY=screen.getVisualBounds().getHeight()*0.05;

mainStage.setX(rightTopX);

mainStage.setY(rightTopY);

stageController.loadStage(R.id.ChatToPoint,R.layout.ChatToPoint,StageStyle.UTILITY);

StagesearchStage=stageController.loadStage(R.id.SearchView,R.layout.SeachFriendView,

StageStyle.UTILITY);当服务器端已经准备就绪后,运行客户端程序,向服务器发送请求连接,与服务器建立通信连接结论自2016年进入衡阳师范学院计算机技术与科学学院,大学四年的时间已经悄然流逝,在这最后的几个月里,我们受疫情的影响,都在家完成毕业设计的最终工作,按照学校老师的相关安排,及时完成学校的教学任务。这次我的课题研究题目是“局域网即时通讯聊天系统的研究与设计”,初次拿到这个题目是,我上网查阅了相关文献,发现网络上有很多很多相似的产品,经过各种渠道的了解,我明白虽然是一个简单的即时通讯工具,但是由于市面上有很多前辈的产品已经存在,所以我此次课题的研究必须要有不同之处,要有进步与创新,所以难度很大。所以我本次的设计主要是仿照腾讯QQ进行的相关修改,它除了能完成市面上大多数即时通讯工具所具有的好友聊天功能以外,也仿照QQ的功能,设计了QQ秀显示、个性签名、好友分组管理、群聊天和好友昵称备注等功能。但是像QQ看点、QQ空间、QQ邮箱和QQ浏览器这些功能,我本次设计只做出了静态页面图标,还未实现相应的功能,在此后的工作学习中,还可以不断地完善这些功能,甚至可以再次基础上创新更多的功能。在这次的课题设计研究中,我也遇到了很多困难,一开始对课题内容要求很迷茫,长时间都无法确定自己要做一个什么样的产品出来,经过与同学老师的讨论,最终确定方案。但是更大的问题出现了,能够想象出一个即时通讯系统的所具有的功能,但是具体到细节代码的实现时,发现存在很多问题。首先是我自己Java语言的编程能力薄弱,不足以支撑我完成一整个项目,其次是数据库的建立问题,这个项目中,有着很大的数据储存工程,聊天信息、用户、好友信息、昵称等等的数据都需要建立合理的数据表,都必须要对数据库相关知识非常熟悉,熟练使用mysql、Navicatpremium等软件。最后就是见后端交互的难题,怎样做到将静态的页面和后台数据代码仅仅联系起来,堂整个项目运作起来,都是很大的困难,后来我不断地询问请教导师,找同学远程指导,才将整个程序跑起来。最终,能顺利的完成这个课题研究,离不开老师与同学的热心帮助,通过这次的课题研究,我本人也得到了很多的成长,首先对于知识方面,我通过看视频、查资料等重新系统的学习了一下Java语言,数据

温馨提示

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

评论

0/150

提交评论