基于Socket网络聊天系统的设计与实现.docx
《基于Socket网络聊天系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于Socket网络聊天系统的设计与实现.docx(41页珍藏版)》请在冰豆网上搜索。
基于Socket网络聊天系统的设计与实现
摘要
随着Internet的飞速发展,网络聊天以其操作简单、方便快捷、私密性好等优点已经迅速发展成为最普遍的网络交流方式之一,越来越受到人们的青睐,丰富了人们的网上生活。
开发并实现具有自身特色的网络聊天系统具有实际应用价值。
本网络聊天系统基于Java应用程序设计,以Client/Server为开发模式,以Eclipse为开发环境,以MySQL为后台数据库,利用JDBC连接数据库。
系统主要包括服务器模块和客户端模块,服务器模块能够对客户端发来的用户信息进行匹配、读取和转发;客户端模块能够进行注册、登录、聊天和文件传输。
系统不但实现了点到点的聊天,还利用Java提供的Socket类和多线程功能,在单个程序中同时运行多个不同进程,从而实现多点对多点的聊天。
总之,该聊天系统具有开放性,实时性,多话题交错等特点,方便了人们网上交流。
【关键词】网络聊天服务器模块客户端模块Socket
ABSTRACT
WiththerapiddevelopmentofInternet,networkchatwithitssimpleoperation,convenientandgondprivacyhasquicklybecomethemostpopularwayofcommunicationnetworks,moreandmorepeoplelikeit,enrichpeople'sonlinelives.DevelopmentandRealizationofthenetworkchatsystemwithitsowncharacteristicsandhaspracticalapplicationvalue.
TheInternetchatsystemisbasedonJavaapplication,designedbyClient/Serverasthedevelopmentofmodels,asEclipsedevelopmentenvironment,MySQLasthebackenddatabase,andusingJDBCtoconnectdatabase.Thesystemincludesservermodulesandclientmodules,servermodulecanmatchusers'data,readandforwardtheinformationwhichissentbyclient;clientmoduletoregist,login,chatandfiletransfer.Thesystemnotonlyachievespeer-to-peerchat,butalsousetheJavaprovidsSocketclassandmulti-threadingcapabilities,inasingleprogramrundifferentprocessesatthesametime,inordertoachievemultipointchat.
Inshort,thechatsystemisopen,real-timeandmulti-topicstaggeredfeatures,easyforpeopletocommunicateonline.
【Keywords】NetworkChatClientModuleServerModuleSocket
前言
随着互联网的快速发展,网络聊天软件以它的实时性、高效率和低成本的特质充当了信息交流的媒介,并逐渐成为网络商圈和生活商圈中不可或缺的组成部分[1]。
网络聊天工具实现了“沟通无极限”,它打破了办公室里上级与下级直接的等级限制,也打破了长辈与晚辈之间的时间限制,也打破了异地之间的距离限制。
同时人们对于网络聊天工具的友好的界面和快捷的操作方式也越来越高。
大家都知道,网络上最常用的交流工具是腾讯QQ,QQ来源于OICQ(openicq),ICQ是“Iseekyou”的简称,是“我找你”的意思。
QQ引用了ICQ的功能即即时通信,我们只要将对方加为好友,不管对方是否在线,我们都可以向对方发送信息,无论对方在哪里,只要登陆QQ,他就能够看到我们给他发的信息,我们就能够随时随地的和对方进行信息交流[2]。
随着网络聊天工具的不断完善,它的功能越来越多样化,由最初的文字交流发展成现在的视频、语音交流,同时也提供了文件的发送和共享功能。
其中不难发现,现在的网络聊天已经不再是一个简单的沟通工具,而是一个信息资讯、交流互动、娱乐的工具。
随着技术的发展,网络聊天工具具有即时性、高效性、安全性、功能上较强的延展性,能够提供方便、快捷的交流[3][4]。
本系统主要分析了网络聊天系统应该具备的功能、运行方式和实现方式,开发出一个基于Socket的网络聊天工具。
该系统主要实现功能包括:
注册、登录、聊天和文件的传输。
第一章系统开发工具简介
第1节客户机/服务器模型
一、C/S结构简介
客户机/服务器模型,又称为Client/Server模型,简称C/S架构[5]。
C/S计算技术在信息产业中占有重要的地位。
它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。
客户端的任务是将用户的要求提交给服务器程序,再将服务器程序返回的结果以特定的形式显示给用户。
服务器程序的任务是接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序。
二、C/S特点
C/S是客户端/服务器,一般适合于软件开发,对客户端的计算机配置要求比较高,客户端也需要安装软件,比如QQ。
C/S架构软件的特点如下:
应用服务器运行数据负荷较轻。
C/S体系结构由客户应用程序和数据库服务程序组成,二者分别称为前台程序和后台程序。
一旦服务器程序被启动,就随时等待响应客户程序发来的请求;客户应用程序当需要对数据库中的数据进行任何操作时,客户程序就会自动寻找服务器程序,并向其发出请求,服务器程序根据规程做出响应,返回结果,应用服务器运行数据负荷较轻。
数据的储存管理功能较为透明。
在数据库应用中数据的储存管理功能是由服务器程序和客户应用程序分别独立进行的。
前台应用可以违反的规则,并且通常把那些不同的运行数据,在服务器程序中不集中实现。
因此对于工作在前台程序上的最终用户是“透明”的,他们无须干涉背后的过程就可以完成自己的一切工作。
在C/S提醒体系下,数据库不能真正成为公共、专业化的仓库,它受到独立的专门管理。
第2节JAVA简介
Java是由SunMicrosystems公司于1995年5月推出的java程序设计语言和Java平台的总称。
用Java实现的HotJava浏览器(支持Javaapplet)显示了Java的魅力:
跨平台、动态的Web、internet计算。
从此Java被广泛接受并推动力web的迅速发展,常用的浏览器限制均支持Javaapplet。
Java平台由Java虚拟机(JavaVirtualMachine)和Java应用编程接口(ApplicationProgrammingInterface,简称API)构成。
Java应用在编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。
在硬件和操作系统平台上安装一个Java平台之后,Java应用程序就可运行。
Java应用编程接口已经从1.1X版本发展到1.2版。
目前常用的Java平台基于Java1.4,最近版本为Java1.7。
Java分为三个体系J2SE(Java2StandardEdition),J2EE(Java2PlatformenterpriseEdition),J2ME(Java2MicroEdition)。
Java是一种具有简单性(Java语法是C++语法的一个“纯净”版本)、面向对象(面向对象是一种程序设计技术,它将重点放在数据和对象的接口上)、网络技能(Java有一个扩展的例程库,用于处理HTTP和FTP这类的TCP/IP协议)、健壮性、安全性(Java可以构建防病毒、防篡改的系统)、体系结构中立、可移植性、解释型、高性能、多线程的动态语言[6]。
Java的I/O建立于流(stream)之上。
输入流读取数据;输出流写入数据。
不同的流类如java.io.FileInputStream和.TeletOutputStream读写某一种数据源。
但是所有输入流都有相同的基本方法,所有输入流也使用相同基本方法来读取数据[7]。
Java中的数据流类型有两种:
输出流(OutputStream):
输出流数据流经数据从程序送到数据接收者,如可以向显示器屏幕或者文件传输数据。
输出流只能写不能读。
输入流(InputStream):
程序从外部设备写数据时,使用输入流。
输入流将数据从数据源传递给程序,可以从键盘或者文件中获得数据。
输入流只能读不能写。
第3节Socket简介
Socket通常被称为“套接字”,用于描述IP地址和端口[8]。
Socket是建立在传输层协议(主要是TCP和UDP)上的一种套接字规范[9],Socket接口是TCP/IP网络的API。
在网络通信中,如果两台计算机之间是靠一个“通道”通信,那么这个“通道”的两端就是套接字。
Socket是传输层提供的网络进程通信接口,相当于我们现在所用的“插座”,是进程之间通信的抽象连接点。
在日常生活中,我们常见到信号插座、电话插座、接收/发送信号(或能量)的插座。
Socket就相当于在电话线和电话机之间安放的插座。
在网络上,两个程序是靠一个双向链路进行通信,这个双向链路的每一端就成为一个Socket。
进程之间通信,首先要需要建立一个自己的Socket,每个Socket都能进行读/写操作,进行读写操作时就会用到Socket中的输入/输出流[10]。
客户端建立Socket对象步骤:
1、调用Socket()创建一个流套接字,并连接到服务器端;
Sockets=newSocket(InetAddress.getByName(“服务器的主机名”),port);
2、调用Socket类的getOutputStream()和getInputStream获取输出流和输入流,开始网络数据的发送和接收。
OutputStreamos=s.getOutputStream();
InputStreamis=s.getInputStream();
byte[]buf=newbyte[100];
intlen=is.read(buf);//从服务器端读取数据
System.out.println(newString(buf,0,len));
os.write("Hello,thisisclient".getBytes());//向服务器端输入数据
3、最后关闭通信套接字。
os.close();is.close();s.close();
服务器端建立Socket步骤:
1、创建一个服务器端套接字,并绑定到指定端口上;
ServerSocketss=newServerSocket(intport),
2、调用accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字。
Sockets=ss.accept();
3、调用Socket类的getOutputStream()和getInputStream获取输出流和输入流,开始网络数据的发送和接收。
OutputStreamos=s.getOutputStream();
InputStreamis=s.getInputStream();
os.write("Hello,thisisserver!
".getBytes());//向客户端发送数据
byte[]buf=newbyte[100];
intlen=is.read(buf);//从客户端读取数据
System.out.println(newString(buf,0,len));
4、最后关闭通信套接字。
os.close();is.close();s.close();
建立连接后,客户端可以发出向Socket写数据的请求,服务器端则会对这个请求进行处理,并将处理结果通过Socket返回。
服务器端则会对客户端进行监听,当监听到客户端有连接请求时,客户端就会与服务器端建立一个通信连接。
同时,客户端被分配一个与Socket连接的本地端口号,服务器也会获取一个本地端口号。
Socket之通信主要使用TCP和UDP两种协议,UDP和TCP套接字用于传输延迟敏感的,但耐错误的数据流,例如多媒体流的应用程序产生的数据,适不适合的[11]。
面向连接的套接字使用的是TCP协议,该协议可以保证数据的可靠传输;无连接的套接字通信使用的是UDP协议,该协议不能保证数据的可靠传输和连接的有效性。
1、使用TCP协议
进行通信必须完成以下过程,如图1.1所示。
客户端
通过Connect方法连接到指定的服务器;
通过write方法向服务器发送服务请求;
通过read从服务端接收数据。
服务器端
使用Bind方法绑定所指定的端口使Socket与一个本地端口相联;
使用Listen方法监听该端口上的请求;
当监听到用户端发出的连接请求时,调用Accept完成连接的操作;
处理客户端请求后,使用write方法将数据返回给客户端;
建立新的Socket以处理传入的连接请求。
2、使用UDP
通信必须完成以下过程,如图1.2所示。
客户端
通过Connect方法连接到指定的服务器;
通过write方法向服务器发送服务请求;
通过read从服务端接收数据;
服务器端
使用Bind方法绑定所指定的端口使Socket与一个本地端口相联;
使用Listen方法监听该端口上的请求;
当监听到用户端发出的连接请求时,服务器端处理连接请求;
使用write将结果返回到客户端。
图1.1面向连接的客户机/服务器交互过程
图1.2面向无连接的客户机/服务器交互过程
第4节Eclipse简介
Eclipse是一个开放源代码、基于Java的可扩展的开发平台。
其实它只是一个框架和一组服务,用于通过插件组成构建开发环境。
Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentKit,JDK)。
Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),这个组件主要是针对希望把Eclipse扩展的软件开发人员,因为它允许构建与Eclipse环境无缝集成的工具。
由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及用户提供一致和同意的环境而已,所有工具开发人员都具有同等的发挥场所。
Eclipse的本身只是一个框架平台,但是由于很多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有灵活性。
许多软件开发商以Eclipse为框架开发自己的IDE。
Eclipse是一个开放源码项目,由于开放源码,任何人都可以免费得到,并可以在此基础上开发各自的插件,因此越来越受人们的关注。
第5节MySQL简介
MySQL是目前最为流行的开放源码的数据库管理系统(DBMS),是完全网络化的跨平台的关系型数据库系统,它是由瑞典的MySQLAB公司开发、发布并支持的。
它被广泛的应用在Internet上的大型网站开放中[12][13]。
MySQL最初的开发出发点是使用MySQL来连接用户的表,这类表采用了快速低层面(ISAM)子程序。
然而,经过一些测试后,发现MySQL的速度或灵活性不能满足用户的需求。
所以为用户的数据库提供新的SQL接口,但API接口与MySQL的几乎一样。
MySQL一直专注于速度、可靠性、扩展性和易用性,而且在发展过程中,不断引入了一些企业级特性,包括复制、全文搜索、事件、外键完整性、行级锁定等。
同时在MySQL5中,还进一步引入视图、存储过程、触发器等高级特性,使得MySQL能进一步满足企业级应用的需要。
MySQL具有如下的优势:
1、速度:
MySQL的运行速度很快。
2、价格:
MySQL对很多个人使用来说是免费的。
3、容易使用:
与其他大型数据库的设置和管理相比,其复杂程度低,容易学习。
4、可移植性:
能够在很多不同的系统平台上工作,如Windows、Linux、Unix、MacOS等。
5、丰富的接口:
MySQL提供了用于C、C++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等语言的API。
6、支持查询语言:
MySQL可以利用标准SQL语法和支持ODBC(开放式数据库连接)的应用程序。
7、安全性和连接性:
十分灵活和安全的权限和密码系统,允许基于主机的验证。
连接到服务器时,所有的密码传输均采用加密形式,从而保证了密码安全。
并且由于MySQL是网络化的,因此可以在因特网上的任何地方访问,提供数据共享的效率。
本章小结
本章主要介绍了开发网络聊天系统所使用到的工具,介绍了客户机/服务器模型、Java、Socket、Eclipse和MySQL。
从使用的工具可以看出,该系统使用的c/s开发模型,使用JDK+Eclipse作为开发技术平台,以MySQL作为数据库,使用Socket作为理论基础。
这些工具对于该系统来说必不可少。
第二章系统分析
第1节可行性分析
可行性分析(FeasibilityAnalysis)也称为可行性研究。
它是以系统调查为基础,针对开发新系统是否具有必要性和可能性,对新系统的开发从技术、经济、社会的方面进行分析和研究,从而避免投资失误,保证新系统成功开发。
可行性研究是为了用最小的代价在尽可能短的时间内确定问题能否解决。
可行性分析包括以下几个方面的内容。
经济可行性:
从经济可行性角度出发,在开发系统的过程中,必须要考虑如何节约开发成本,缩短开发周期,用最少的成本获取最大的回报。
为了保证软件产品的质量,系统的开发周期一般都是在一个月左右,并且要保证有充裕的时间进行调研和测试。
本系统开发经费对于企业来说经济上是可以接受的,开发该网络通信系统所需的软件环境(Eclipse开发工具和数据库MySQL)和所需的硬件环境(计算机及其相关硬件),在市场上都很容易买到而且很便宜,或者也可以在相关网站上进行免费下载。
开发该系统成本就要集中在系统的开发和维护上,对用户不会造成经济负担。
而且当系统投入使用后,企业内部交流工具也可以使用该系统,一方面保证了内部信息的安全,一方面也充分利用了网络资源。
所获得的效益将远远超过系统开发的成本,所以在经济方面是可行的。
技术可行性:
该系统使用的开发语言是Java,由于Java语言具有跨平台性,所以很多编程者都会选择它。
经过多年的发展Java虚拟机已经具有很高的版本,在性能上也有了很大的提高,在API函数方面有了许多扩充和冗余的精简。
本系统采用C/S架构。
因为C/S具有一定的灵活性、通用性和易操作性等特点,是用户对来说是一个比较好的选择。
目前这种架构在系统架构方面被广泛采用,在系统架构上已经积累了大量的经验,所以本系统在技术上是可行的。
社会可行性:
随着计算机的发展和普及,以及互联网技术的发展,很多公司和企业都能够提供局域网信息服务。
而网络聊天系统只需要用户的电脑进入局域网就能访问,不必购买其他任何昂贵设备,大大节约了资金。
无论从技术可行性、经济可行性还是社会可行性来说,系统的设计与实现都是可行的。
第2节业务流分析
对系统的组织结构和功能分析时,可以将系统分为:
网络聊天客户端、网络聊天服务器端和数据库三个部分。
对系统的组织结构和功能进行分析时,需要以一个实际业务流程的角度将系统调查中有关该业务流程的资料都联系起来作为下一步的分析基础。
业务流程分析可以帮助我们了解业务的具体处理过程,发现和处理系统的调查工作中的欠缺和错误,修改和删除原系统的不合理部分,在新系统基础上优化业务处理流程。
图2.1为该系统的业务流程图,该系统的业务流程如下:
1、启动系统的服务器,客户端运行程序,出现登录界面。
2、点击注册,客户端向服务器端发出注册请求,若注册成功,回到登录界面。
3、用户点击登录,客户端向服务器端发出登录请求,服务器将用户信息与数据用户信息进行匹配,若匹配成功,用户进入功能界面;反之,则提示用户密码错误。
4、用户登录后,客户端向服务器发送处理某些事件的请求,如私聊、群聊、文件传输等。
5、服务器将信息准确转发到用户。
第3节需求分析
软件需求说明能把软件功能和性能的总体概念描述为具体的软件,从而奠定软件开发基础。
该过程将软件计划阶段所确定的软件范围逐步细化到可详细定义的程度并分析出各种不同的软件元素,然后为这些元素找到可行的解决方法。
总的来说,是对软件计划阶段建立的软件工作范围的求精和细化。
它回答了“系统该做什么”的问题[14]。
一、系统设计目标
网络聊天系统主要对象是局域网内的用户,使用交流更简单。
设计本系统的目标如下:
1、一台电脑上能够同时登录多个不同的用户。
2、用户注册。
用户通过填写基本资料进行注册,用户基本信息被数据库保存。
3、用户登录。
用户使用注册时的用户名和密码登录系统。
4、聊天。
用户登录成功后,可以向单个或所有在线好友发送消息。
5、文件传输。
用户之间除了能够使用文字交流外,还能共享文件。
二、系统功能需求
1、注册
用户首先要进行注册。
用户在注册时需要填写用户名、密码等相关信息。
系统将该用户名作为登录的账号。
2、登录
1 登录时用户用注册的用户名进行登录。
2 用户点击登录按钮,客户端将用户信息发送到服务器,服务器对用户信息进行验证,返回相应的验证结果。
若验证成功,用户进入主界面;若验证失败,则返回错误信息,用户回到登录界面。
3、聊天
该系统只能对在线好友进行聊天。
聊天可以分为私聊和群聊。
1 私聊:
私聊就是两人之间的聊天,及一对一的聊天。
2 群聊:
群聊就是多人之间的聊天,及一对一的聊天。
4、文件传输
该系统文件传输可以分为发送文件和接收文件。
1 发送文件:
用户通过本系统将本地文件发送给在线好友。
2 接收文件:
用户接收好友分享的文件,并将文件保存在本地。
图2.1系统业务流程图
本章小结
本章主要对网络聊天系统的可行性、业务流和需求进行了分析。
在需求分析中,分析了该系统的设计目标和功能需求,该系统的主要功能包括注册、登录、聊天和文件传输。
第三章系统概要设计
第1节系统总体描述
能够说明系统软件功能组成模块的就是系统体系结构,其中包括具体有哪些模块,系统由哪些功能以及结构组成。
图3.1是本系统的体系结构图:
图3.1系统体系结构图
本系统总的来说包括两个部分:
服务器端和客户端。
在服务器端主要是服务器控制模块,接收客户端发来的连接请求,根据客户端的要求将信息准确的转发到客户端。
客户端主要包括四个模块,用户在第一次进入系统时,必须首先进行注册,服务器将用户注册的信息存入数据库,以便用户再次进入系统时不再注册;用户注册后就可以直