基于Socket的多客户端网络聊天系统的开发与设计

更新时间:2023-08-18 16:12:01 阅读量: 资格考试认证 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

目 录

前言 .................................................................... 3

1 JAVA的功能与编程 ...................................................... 3

1.1 JAVA的概述 ......................................................... 3

1.2 JAVA的优势 .......................................................... 4

1.3 JAVA 应用于网络 ...................................................... 6

2 系统分析 ............................................................. 10

2.1 系统基本功能描述 ................................................... 10

2.2 可行性分析 ......................................................... 10

2.3 课题来源 ........................................................... 11

2.4 需求分析 ........................................................... 11

3 系统总体设计 ......................................................... 11

3.1 数据库设计 ......................................................... 11

3.2 简易聊天工具系统的总体设计要点 ..................................... 12 3 .3 简易聊天工具系统的设计步骤及功能模块划分 .......................... 13

3.4 简易聊天工具系统各功能模块 ......................................... 14

4系统环境与测试 ........................................................ 36

4.1开发环境工具 ....................................................... 47

4.2 硬件环境 ........................................................... 47

4.3功能模块的测试 ..................................................... 47

参 考 文 献: ....................................................... 49

莆田学院2015届本科毕业论文

基于Socket的简易网络聊天系统的开发与设计

学生:庄炜杰 (指导老师:林建兵)

(莆田学院信息工程学院)

摘要:随着网络技术的在校园中的普及,聊天工具已经成为一种必不可少的校内交流工

具,受到越来越多的同学的青睐。市场上有很多优秀的聊天工具,用的最广范的最被人们所接受的有腾讯QQ、MSN、人人网等等,但此简易聊天工具是专门针对学校内部的特点使其在网络聊天产业中占有一席之地。该系统的开发主要是服务器端和客户端两个方面。服务器端通过套接字与服务器建立连接,服务器会接受客户端的请求,并且会按要求转发客户端所要传递的信息,刷新用户信息。后者通过与服务器建立连接,来进行客户端之间P2P的信息交流。其中用到了局域网通信机制的原理,通过实现Runnable接口建立多线程机制。开发中使用了计算机网络编程技术,如C/S模式,多线程技术,网络通信等等。在网络通信中,读取消息的和发送消息,是利用Stream来实现交换,其中介绍了如何实现一个构建的信息交换,包含了基本的软件工程的方法。通过这些分析,该简易聊天工具系统采用Java语言进行编写,本系统是以Eclipse为开发平台。首先建立系统应用原型,然后进行修正和改进,直到完成可发布版系统。

关键词:局域网 聊天 套接字 Java Eclipse 简易聊天工具

1

基于Socket的简易网络聊天系统的开发与设计

Development and design of multiple client network chat system

based on Socket

Student:zhuang wei jie(Faclty Asviser:lin jian bing)

Abstract: With the development of network technology in the campus of popularization, chat

tools has become an indispensable tool in exchange, more and more students of all

ages. There are a lot of good chat tools on the market, with the most extensive and

most accepted with Tencent QQ, MSN, Renren and so on, but the client chat tool is

designed according to the characteristics of internal school which occupies a space

for one person in the industry in the Internet chat. The development of this system

is mainly two aspects of server and client. The server through socket to establish a

connection with the server, the server will accept the request of the client, and

according to the requirements of the client message forwarding, refresh user

information. The latter through a connection with the server, carries on

communication between P2P client. Which uses the principle of LAN

communication mechanism, establish multi thread mechanism by implementing

the Runnable interface. Computer network programming technology is used in the

development, such as C\/S model, multithreading technology, network

communication etc.. In the network communication, reading messages and send

messages, is to achieve the exchange using Stream, which introduced the exchange

to achieve a construction of information, including the basic methods of software

engineering. Through these analyses, the client chat tool system using Java

language, the system is based on Eclipse platform. First establishes the system

application prototype, then revised and improved, until the complete release

system.

Key words: LAN Chat Socket Java Eclipse

2

莆田学院2015届本科毕业论文

前言

随着第三次技术革命的展开,互联网进入了千家万户,人们的生活随着网络的发展也发生着翻天覆地的变化。人们在工作、学习、生活中对它的依赖越来越大。而聊天室成为了人们最常见, 最直接的网上聊天工具。它的主要功能就是聊天,提供了一个人与人之间开展人际交流的平台。 也是网络在现实中最实用的例子 。本文中描述的系统是基于JAVA技术而开发出的应用程序。能过实时的根据用户的要求进行信息的传递,交互性高,能够快速的对客户的请求进行处理非常有效的处理客户请,系统的更新和维护非常的方便,对运行所需要的环境要求较低。

1 JAVA的功能与编程

1.1 Java的概述

上世纪,Sun公司根据需要开发出一种不同与以往语言的编程语言——Java。各种类型的平台,不同的背景和各种类型的机器都可以使用这种语言。Java语言给计算机编程带来了又一次技术革命;应用软件被彻底的其改变了编程模式。Internet的主流语言正在逐渐被Java取代。向迅速发展起来的信息世界增添了新的活力。

1991年Sun公司成立了Java语言开发小组。一位非常优秀的工程师James Gosling担任该小组的领导人,其目的是研制一种开发家用电器的逻辑控制系统。在开始写就Java时,Gosling建立了在一个分布式的、巨大的网格环境中运行的系统。在设计中Gosling采用了在一个操作系统上以虚拟机的方式运行,这样一来,Java就具备了平台无关性。在设计窗口时也采用相似的技术。在用户界面中统一的技术描述,就保证了良好的用户界面的可移植性。

1.1 .1 Java带来的影响

Java自1995年诞生以来,虽时间不长,但是被业界的各大公司所接受, 现在,众多的企业信息系统解决的最佳方案已经被Intranet所取代。它具有使用方便、费用低廉和管理方便的优点。无论用户使用何种类型的机器,那种操作系统。浏览器的界面都是统一的,而在服务器中则存放着应用程序、数据库和Java浏览器页面。管理人员不用在为用户的安装、升级和培训而感到苦恼,由开发人员升级软件的版本,用户只需要一个操作软件下载安装软件就可以了。

随着Java的诞生计算机信息的交换进入了一个非常重要的里程碑。在Java出现之前;信息的交换主要是是靠存储的共享和不同宿主机上运行的程序交换进行的,交换程序双方共同维护消息的语义。在Java时代,网络上通过可执行的实体进行程序进程的交换。一个更高级的信息交换阶段,有一定智能性的代理,不仅仅有数据的状态,还有数据的操作。

3

基于Socket的简易网络聊天系统的开发与设计

Java的产生和互联网的崛起使得笨重繁杂的应用程序开始向小型化发展,Java使得互相协作的可执行的实体进行数据的传送与处理。加速了应用程序的网络化、小型化的趋势。使得软件不在成为“少数人”的奢侈品,从而面向了“大众”,收费少成为了网络应用软件的主要特点。分布式的技术提供了用多少,就下载多少。随着Java和 Internet的发展,应用软件的开发和使用方式正在发生着翻天覆地的变化,传统的信息处理工具必然将被淘汰,因为信息只有共享和使用中才会体现它的价值。

1.2 JAVA的优势

1.2 .1 JAVA的主要特点

Java语言具有简单性、面向对象过程、分布式、解释执行、健壮性、 安全、体系结构中立、可移植、性能高、多线程以及动态性的特点。

1.简单性

Java最初的设计目的是为对家用电器进行简单易行的,方便用户使用的,可控的操作而开发的一中编译语言,因此必须简单明了。其主要在以下三个方面体现:

1) Java是以c++为基础加以改变发展起来的;因此其的风格和C++相似,所以对于C++程序

员来说是很容易掌握的。

2) Java放弃了C++语言中容易引发程序指针和内存管理错误的缺点。

3) Java提供了很多的类库。类提供了一些特定的功能,程序员可以直接使用。

2.面向对象

面向对象是相对与面向过程而言的,面向过程是相对于事件来说的 ,一个事件想要完成需要经过那些过程。用函数的方式一步步的将这些步骤实现,实用的时候依次调用这些函数就可以了。面向对象是有各种对象构成的,一个对象完成一些特定的功能,各个对象用接口的方式连接。例如:人开门的事件,用面向对象的方法就是。首先人具有开门的功能,锁具有打开门的功能,开门时人只需要调用锁的功能就可以了,不需要知道锁是如何打开的。提高了代码的复用性

3.分布性

Java是面向对象的语言。TCP/IP协议的使用是通过它所包含的类库,用户可以凭借统一资源定位符打开并访问网络上的对象。

4.健壮性

Java具有很好的程序自动检查错误的功能。Java可以自动的检查内存中的错误;减少内存中的出错,还提供了垃圾回收方法。防止程序员在编写程序时因忘记写内存管理代码而产生的错误。在编译时,Java可以帮助程序员减少程序的错误,对没有被处理的错误加以提示,以防止系统的崩溃。

4

莆田学院2015届本科毕业论文

5.安全性

用于网络中分布式环境下的Java防止病毒的入侵。因为Java不支持指针,通过对象的实例变量来访问内存;这样就防止病毒访问其私有成员,同时预防可因操作指针而产生的错误。

6.可移植性

平台无关性在体系结构中是独立的。使得Java程序客户端及服务器端可以被不同的系统在相同的网络环境中使用,非常的方便。Java中提供了许多可以被移植的类库,可以在不同的系统上使用的接口。Java语言实现了编译器,Java运行时系统是由C实现,这使得Java 系统本身也具有可移植性。

7.多线程

多线程功能使得在一个程序里可同时执行多个进程。多线程的最大的好处是更好的实时的控制性能和交互性能。同步机制保证了数据具有共享的特性。多线程使得程序开发者可以在不同的线程完成不同的特定行为,而不需要采用全局的事件循环机制,这样就很容易地实现网络上的实时交互行为。

8.动态性

随着面向对象设计方法的发展,Java的动态性也随之产生。在程序运行过程中它允许实时的装入所需要的类,使它适合于不断发展的环境。

1.2 .2 JavaApplet

Applet是创建在html上的Java程序;它是具有安全性、动态性、跨平台无关性特点的网络应用程序。Java语言的特点使的其可以将网络的利用达到最大化。这些由Java语言编写的程序嵌入在特定的容器中;通常可以与用户进行交互式交流,产生特定的效果。

Java中丰富的类库,它们提供了多线程、网络化、面向对象系统的需要。

1.主要包含两个最基本的包:实用包(Java.util)和语言包(ng)

其包含的主要类:

语言包(ng)。String类、class类、Runtime类、Object类、Float类和Math类 实用包(Java.util):Data类、Vector类、Arrays类和 Enumeratin接口

2. Socket编程用低级网络包实现

3.网络支持Internet的网络通讯协议,提供了与Internet的接口。 它支持统一资源定位符连接,简化了程序设计。

在操作符、变量声明、参数传递、流控制等方面;Java使用了同传统语言相同的方法,使得程序员可以非常方便地进行编程的开发。为了实现其特性, Java也放弃了传统语言中很多不足的内容。 5

基于Socket的简易网络聊天系统的开发与设计

1.全局变量

在Java程序中,本类中通过类定义公用的、静态的全局变量可以被其它类所使用。使得变量可以被其他类所访问和修改。Java更好的封装了变量,使的不会造成系统的崩溃。

2.Goto

goto语句在Java中是作为保留字的,不能被用于命名。在传统的语言中goto跳转语句是用来处理遇到异常时的跳转;而在Java中是通过try,Catch, final等来处理遇到错误时跳转。使程序更结构化。

3.内存管理

在传统的语言中内存是不能被自动分配和释放的。而Java中可以自动的进行的,可以避免因程序员忘记写内存的分配而造成的系统崩溃,在Java中通过new运算符分配内存堆。同样也避免因程序员忘记写内存的释放而造成的内存块也会逐渐耗尽系统资源,避免了资源的浪费,更好的利用了系统资源。

4.类型转换

在Java中类型的转换主要包含3中情况,分别为自动转换、强制转换。自动转换就是源代码中不用任何特殊说明,系统会自动进行转换。而强制转换是在低级类型向高级的类型中的转换。在代码中不需要用任何说明,可以直接使用。

1.3 Java 应用于网络

网络上的文本、音频、视频等资源可以被Java程序获得。同时,处理这些资源。例如Java程序可以获取某时间最新数据,并且显示出来。在处理上,会生成一个对象,然后用Java中的方法获取该对象的资源。

例如:Java从网络上获取图像并且加以显示,Java中提供了相应的方法。

getImage(new URL(字符串))

其使用格式可有两种:

String url = “结点URL”;

Image image;

try {

image = getImage(new URL(url));

}

6

莆田学院2015届本科毕业论文

catch(Exception e){

System.out.println(“Can’t open the URL “); }

URL imgur=null;

Image image;

try {

imgur=new URL(“结点URL “);

}catch (MalformedURLException e) {

System.out.println(“Can’t open the URL “);

}

image=getImage(imgur);

前一种格式用“new URL(url)”生成 URL 对象, 并直接作为getImage的参数,后一种格式先用“new URL(url)”生成一个 URL对象,再传给getImage,两种格式本质上是一样的。

以上仅是Java在客户端应用的一些方面,目前,Java更广泛的应用是在服务器端。

1.3.1 IP/TCP

(1)IP、TCP协议的特点:

TCP/IP(Transmission Control Protocol/Internet Protocol)传输控制协议/网际协议。是一组以TCP与IP为基础的相关协议的集合,该协议不是完全符合OSI的七层参考模型,而是采用的四层结构,网络接口层、网际层、传输层、应用层。

网络接口层

对实际网络媒体进行管理,定义如何使用实际网络来传输数据。

网际层

负责提供基本的数据封装成包传送功能,但是并不能保证数据能正确的传送到目的主机,工作在这一层的主要协议是IP。

传输层

此层提供了点到点之间数据传输服务。如面向连接的传输控制协议(TCP)、面向无连 7

基于Socket的简易网络聊天系统的开发与设计

接用户数据报协议(UDP)。

IP协议的作用:是TCP/IP协议族的核心,也是网际层中最重要的协议,接收有更低层发来的数据包,并将该数据包发送到更高层,此外网际层也可以将从传输层接收的数据包传送到更低层[12]。IP是面向无连接的数据报传送,IP将包文件传送至目的主机后,不会对传送的内容进行效验。

TCP协议的功能:TCP是在传输层,提供了面向连接的数据包传送服务,保证数据包能够正确的被传送与接收,包含内容的效验与包的顺序,损坏的包可以被重传。一般不适合工作在局域网中。因为其提供的数据传送是会验证的,因此效率较低。

TCP/IP协议具有以下特点:

1、协议标准是开放的,在计算机硬件及操作系统是独立的,使用是免费的。

2、允许IP协议在各种不同的网络上运行,具有分配网络地址的功能。

3、可以为各式各样的应用提供服务。

(2)端口号:

端口号的理论范围是0~65535之间,其中0~1023是保留端口大部分分配了特定的应用协议。在Java中服务器端是有ServerSocket类来表示的,用它来监听指定的端口并接收客户端的连接请求。计算机上的同一端口号只能分配一个唯一的ServerSocket对象,不能存在两个ServerSocket对象监听同一个端口。同时还要避免没有被其它程序占用。计算机唯一服务的端口号是用1024之后的连接端口。

1.3.2 Socket

Socket,简称套接字,是为了完成会话所需要的技术,是在客户端和服务器端实现网络间进程通信的技术,套接字是在较低的层次上通信的。用于网络建立连接,当成功的连接时;在程序的两端会产生实例,用于请求和接受会话,相当于一个管道。

开发原理:

服务器,使用特定类监听指定的端口,端口是由1024~65535之间的端口组成的, 当客户端提出连接请求时,会对其进行处理,产生会话;在会话结束后,关闭连接。

客户端,使用Socket对服务器的端口进行连接,成功后,就可以打开进行会话了;当会话结束后,关闭资源。

Socket程序的工作过程:

1、建立Socket连接:在通信开始之前首先确认程序的两端的实例是否对应;如果

8

莆田学院2015届本科毕业论文

对应就可以建立一个通道进行连接。

2、数据通信:利用虚拟连接通道传送数据信息进行通道。

3、关闭:通信结束时,再将所建的虚拟连接拆除。

具体如下:

图1 socket通信

主要步骤:

首先:主机B接受一个由主机A发送的的数据段;此数据段中包含了同步序列号的标志位;建立连接,通过这个数据段,主机A向主机B 发送同步请求;其中包含有A要和B建立通信;B要用特定的数据段来回应A。

其次:主机B 收到主机A的请求后,必须进行同步请求应答。会向A反馈一个数据段,向A说明已收到请求;且需要选择数据段来回应。

最后: A收到这个数据包后,需要发送一个确认;回复B:已收到回复,连接建立成功,可以传递数据。

基于Socket的简易网络聊天系统的开发与设计

SYN=1,SEQ= ACK=1,SYN=1,SEQ=

主机A 主机B

图2 主要步骤

2 系统分析

2.1 系统基本功能描述

客户端可以实现登陆,即时聊天,密码的修改,查看历史聊天记录,查看公告,查看在线用户等功能。

服务器端应当建立一个ServerSocket,用于不断进行侦听客户端是否有连接请求或者断开连接。服务器端就是一个管理信息发送的控制中心;客户端要想进行信息的传递,首先必须先将信息发送至服务器端,然后服务器再根据要求将信息发送至所要发送的地点。

2.2 可行性分析

本系统可以从以下几个方面的内容进行可行性分析:

(1) 技术可行性

使用Swing技术可以很方便的开发出Java图形界面窗口。 使用socket技术,可以非常方便的、实用的、高效率的开发聊天系统;因此技术上是可以实现的。

(2) 经济可行性

在网络时代,计算机网络已经大范围的普及,因此在设备上不需要进行大范围的投入。仅需开发软件,因此经济上是可行的。

(3) 操作可行性

只要一台以上计算机连接在同一个局域网内,本系统就可以安装使用,所以操作上完全不存在问题。

10

莆田学院2015届本科毕业论文

2.3 课题来源

根据时下校园的普遍需求,专用的针对学校的简易聊天工具软件越来越受同学们青睐。因此开发简易聊天工具是相当有必要的。拥有一款针对学校内部的简易聊天工具聊天软件,不仅可以方便同学们在网络故障时的交流,同时可以增加沟通。本人在大学时学习过JAVA语言和网络编程,为了更好的有效的检验自己的技术能力,本人就决定以《端对端简易聊天系统》为毕业设计,希望通过这一次的能进一步提高本人的java编程的能力。

2.4 需求分析

简易聊天工具主要有两个方面:服务器端和客户端。首先要先了解一下服务器端和客户端要完成的任务,了解了这些那么任务就完成了一半。

客户端要完成的工作包括:

1.与服务器端建立发送信息的通信通道。

2.对服务器端发送的信息进行接收。

3. 更改当前用户自身的信息,如密码等。

与服务器相比,客户端的任务更加简单,通过分析,我们可以了解,简易聊天工具系统的核心就是这些问题。

3 系统总体设计

3.1 数据库设计

本系统中的主要实体和其属性有:

1.用户(ID,用户名,密码,年龄,性别,住址,注册时间)

E-R模型如图所示。

11

基于Socket的简易网络聊天系统的开发与设计

图 3 系统实体及其属性

1.用户表

表1 用户表user

3.2 简易聊天工具系统的总体设计要点

本简易聊天工具系统的设计与其他普通聊天软件的设计有着很多的不同地方,普通聊天软件的设计有很多要考虑的因素,例如,普通聊天软件需要对程序的图形窗口以及布局进行了大量美化工作,而简易聊天工具只是满足的用户的基本的聊天需求。因此,在设计简易聊天工具系统的过程中,以下几个设计要点是必须要考虑的重点:

1、实现思想

在网络上的聊天工具一般都是服务器提供的连接响应。用户以客户端为平台连接到服务器,那么用户在同一服务器上就可以聊天了。因此需要实现客户端与服务器端的功能。

2、服务器端工作流程

12

莆田学院2015届本科毕业论文

客户端发送请求连接,用户登录,然后进行审核,审核通过后则表示用户成功登录;然后就可以接受客户端发送的信息,再根据需要进行信息的处理;将信息传递至将要传递的客户端。

3、客户端工作流程

客户端程序与服务器端程序相比就简单了,客户端需要与服务器端成功的连接,然后寻找相同的Socket,通过这个Socket来发送和接收数据就可以了。

3 .3 简易聊天工具系统的设计步骤及功能模块划分

聊天系统工作原理图如下:

图6 工作原理图

13

基于Socket的简易网络聊天系统的开发与设计

3.4 简易聊天工具系统各功能模块

3.4.1服务器端功能:

图7 服务器功能

服务器端的主要功能包括:启动服务、停止服务、在线用户详细信息的查看、发送接受到的客户端信息、修改学校信息、部门信息的维护、用户信息的维护。

3.4.2 客户端功能划分为以下模块:

图8 客户端功能

客户端的主要功能包括:客户端的连接与断开、更新用户信息、发送消息、查看同学信

14

莆田学院2015届本科毕业论文

息、聊天内容的打开保存删除

3.4.3登录模块

流程图如下

图 9 登录流程图

输入: 管理员账号或者用户帐号和对应的密码。

处理: 检索该用户名是否存在于数据库中,若能检索到,那就在数据库中查找该用户名对应的密码是否正确,再根据用户的权限进入相应的业务范围和正常的流程,

输出: 相应权限的页面。

登录模块主要代码:

package qq_client_jframe;

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.GridLayout;

15

基于Socket的简易网络聊天系统的开发与设计

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.util.ListIterator;

import java.util.Vector;

import javax.swing.BorderFactory;

import javax.swing.Box;

import javax.swing.BoxLayout;

import javax.swing.DefaultComboBoxModel;

import javax.swing.Icon;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JComboBox;

import javax.swing.JFrame;

import javax.swing.JLabel;

16

莆田学院2015届本科毕业论文

import javax.swing.JPanel;

import javax.swing.JPasswordField;

import javax.swing.JTextField;

import javax.swing.border.Border;

importimport qq_client_er_add_JDialog;

import listener.QQ_Login_Button_Listener;

import mytools.LogsReaderWriter;

/**

* 这是一个QQ登录窗体类,它继承自javax.swing.JFrame

* @author

*

*/

public classextends JFrame{

privatecomboBox_ID = new private JPasswordField passwordField_Password = new JPasswordField("123456");

private JPanel panel_NetOption = null;

private JLabel label_NetOption = new JLabel();

private JButton button_NetOption = new JButton("设 置"); 17

基于Socket的简易网络聊天系统的开发与设计

private JButton button_Add = new JButton("注册"); private JButton button_Login = new JButton("登 录"); private JButton button_Exit = new JButton("退 出"); private File file = new File("id/id.txt");

privatecomboBox_IP = private JTextField textField_Port = new

JTextField("6000");

private user_add_JDialog user_add_JDialog = null;

private ObjectOutputStream objectOutputStream = null; private ObjectInputStream objectInputStream = null; private String = null;

private String = null;

/**

* 构造一个登录窗体

*/

public QQ_Login_JFrame() {

super("QQ用户登录");

//初始化QQ号码框,

18

莆田学院2015届本科毕业论文

launchComboBox_ID();

this.panel_NetOption = this.makeNetOption();

this.panel_NetOption.setVisible(false);

this.makeAll();

this.setResizable(false);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.pack();

this.setLocationRelativeTo(null);

this.setVisible(true);

}

/**

* 生成一个显示在登录窗体上的有图片的JLable

* @return 显示在登录窗体上的有图片的JLable

*/

private JLabel makeLoginImage(){

Icon i = new ImageIcon("image/QQ_Login.jpg");

JLabel l = new JLabel(i);

return l;

}

19

本文来源:https://www.bwwdw.com/article/7hpj.html

Top