基于java+Socket+sqlserver的网络通信系统设计与实现(毕业论文+程序源码)
大家好,今天给大家介绍基于java+Socket+sqlserver的网络通信系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。
文章目录:
- 基于java+Socket+sqlserver的网络通信系统设计与实现(毕业论文+程序源码)
- 1、项目简介
- 2、资源详情
- 3、关键词
- 4、毕设简介
- 5、资源下载
1、项目简介
-
网络通信在当今信息社会中起着不可或缺的作用 ,人们可以利用网络通信技术进行即时的信息交流。例如,人们可以通过Internet搜索所要的信息,通过网上通信工具聊天,交流信息,上网购物等等。
-
本课题是应用了计算机网络通信技术和JAVA网络编程的基础知识,以JAVA为平台,利用Eclipse开发工具,并使用SQL Server 2000管理数据库数据开发出的基于Socket的网络即时通信系统。系统采用客户机/服务器(C/S)的模式设计,是一个三层C/S结构,数据库服务器、应用程序服务器端、应用程序客户端,按照此设计思想,系统采用C/S结构,可以将任务合理分配到客户机端和服务器端 ,从而降低了系统的通信开销。此系统共分为两个模块:客户端模块和服务器端模块。从操作简便、界面美观、灵活实用的用户要求出发,设计开发的网络通信系统可以实现用户注册,用户登录,消息通信和好友管理等主要功能。
-
本说明书主要介绍了本课题的研究意义以及开发背景、开发过程,和所完成的功能,并着重说明了开发设计的思想、技术难点和解决方案。
2、资源详情
项目难度:中等难度
适用场景:相关题目的毕业设计
配套论文字数:20448个字51页
包含内容:整套源码+完整毕业论文
3、关键词
网络通信 JAVA平台 C/S Socket4、毕设简介
提示:以下为毕业论文的简略介绍,项目源码及完整毕业论文下载地址见文末。
引言
1.1 课题的研究现状
网络通信在当今信息社会中起着不可或缺的作用 ,人们可以利用网络通信技术进行即时的信息交流。比如说QQ聊天工具,它就是利用网络通信技术开发的一款众所周知的网络聊天工具。目前,信息交流是互联网提供的主要内容,网络通信系统有多种实现方式,类似ICQ属于一种点对点的聊天系统;还有一种是基于Socket的集中式聊天系统,这种聊天系统需要登录统一的聊天服务器。
省略
1.2 课题简介以及设计要求
1.2.1课题简介
随着人类进入信息社会步伐的加快,计算机网络及其应用得到了飞速的发展,并且成为人们日常生活中的不可或缺的一部分,成为人们有效获取信息和进行娱乐的主要方式之一。例如,人们可以通过Internet搜索所要的信息,通过网上聊天工具聊天,交流心得等等。
本课题就是应用了计算机网络通信技术和JAVA网络编程的基础知识,利用Eclipse开发工具开发而成的一个小型的基于JAVA的Web通信系统。
1.2.2课题设计要求
深入了解计算机网络通信基础和网络编程技术。
查阅与网络通信设计相关的文献资料,尽可能地搜集与本课题相关、类似的软件系统。
结合已经有的相关资料,设计出缜密的网络拓扑结构图、总体设计和详细设计。
选择、运用适当的语言工具及其他工具实现设计方案。
根据要求撰写设计说明书(论文)。
1.3 课题的调研
在本系统开发之初,为了做好系统需求分析工作,本人做了充分的调研,从而认识到完成本系统需做到以下几点:
熟练掌握计算机网络通信的基本原理、网络体系结构、协议。
熟练掌握JAVA网络编程技术。
要有正确的设计思想、思维方式以及独立的工作能力,要提高分析问题、综合运用所学理论知识和基本技能解决实际问题的能力。
通过毕业设计,能够综合运用所学知识调查、分析、解决实际问题;形成能够独立开展研究、独立完成工程总体规划和设计的工作能力。在理论联系实际中,掌握和巩固所学专业知识,为步入社会打好基础。
1.4 可行性分析
1.4.1 可行性分析的目的
省略
1.4.2 技术可行性分析
省略
1.4.3 经济可行性分析
省略
1.4.4 操作可行性分析
省略
1.4.5 法律可行性分析
省略
1.5 论文各章简介
第1章引言部分,引言主要叙述关于此课题的国内外的研究状况、问题的定义和内容简介、课题的调研和可行性分析。
第2章主要内容是系统需求分析,包括:业务流程分析;数据流分析;数据字典。
第3章主要内容是系统总体设计,包括: 系统开发的原则;系统开发设计要点;系统总体功能结构设计;系统数据库设计;开发环境设计与运行环境设计。
第4章主要内容是服务器模块设计,包括:主服务器类设计;多线程Server Thread类的设计;登录验证模块设计;新建用户模块;好友管理模块(查找好友模块,读取好友信息模块,添加好友模块,添加好友应答模块,删除好友模块,退出下线模块)。
第5章主要内容是客户端模块设计,包括:新用户注册模块;用户登录模块;消息通信模块(发送消息,监听用户操作消息,接收消息,发送文件,接收文件);好友管理模块(查找好友,添加好友,查看资料,更新好友列表,删除好友)。
第6章主要内容是用户手册,包括:系统功能简介;系统运行环境和安装环境简介;系统的操作指南说明。
第7章主要内容是系统评价,包括:系统的特色和优点简介;系统存在的不足与改进方案说明;毕业设计的收获和心得。
最后还有结论、致谢、参考文献等等内容的介绍。
2 系统需求分析
2.1 业务流分析
在对系统的组织结构和功能进行分析时,需从一个实际业务流程的角度将系统调查中有关该业务流程的资料都串起来作进一步的分析。业务流程分析可以帮助我们了解该业务的具体处理过程,发现和处理系统的调查工作中的错误和疏漏,修改和删除原系统的不合理部分,在新系统基础上优化业务处理流程。
本课题设计的网络通信系统业务流程如下:
系统启动服务器。
客户端向服务器注册,告知服务器它在监听某主题。
客户注册之后,向服务器发送有关事件处理消息,如发送消息给好友,接收好友的消息,发送文件,接收文件,删除好友,查看好友资料,添加好友等等。
服务器再把相应的消息发送给所有监听此主题的客户。
2.2概念结构设计
概念模型(E-R图):
2.3 数据流分析
数据流程分析主要包括对信息的流动、传递、处理、存储等的分析。数据流程分析的目的就是要发现和解决数据流通中的问题。现有的数据流程分析多是通过分层的数据流程图(data flow diagram,简称DFD)来实现的。其具体的做法是:按照业务流程顺序,将相应调查过程中所掌握的数据处理过程,绘制成一套完整的数据流程图。
做出初步的数据流图如下:
2.4 数据字典
2.4.1数据字典
数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。数据流图和数据字典共同构成系统的逻辑模型。
⒈数据流条目
用户基本信息表
编号:D1
来源:客户端写入
去向:数据库
数据流量:每位用户1份
组成:{用户的号码+用户的昵称+用户的密码+用户的状态(在线否)+IP地址+用户的资料+用户的头像+用户性别+用户的E-Mail和用户的籍贯}
用户好友表
编号:D2
来源:客户端写入
去向:数据库
数据流量:每位客户1份
组成:{用户的号码+好友的号码}
⒉数据元素条目
以下以用户的号码,用户的昵称,用户的状态,用户的资料四个数据元素条目为例:
名称:用户号码
编号:F1
别名:用户名
类型及长度:整型,4
相关联数据:用户好友表
名称:用户昵称
编号:F2
别名:无
类型及长度:字符型,10
名称:用户状态(在线否)
编号:F3
别名:无
类型及长度: 布尔型,1
取值范围:“0”,“1”
名称:用户的资料
编号:F4
别名:无
类型及长度:varchar,50
2.4.2处理逻辑说明
处理逻辑名: 用户注册
说 明: 新的用户首先要进行注册,生成用户的号码和登录密码之后才能进行服务器登录。
处理逻辑编号:1
输入的数据流:用户名、密码,昵称等信息
处 理 过 程: 用户首先将自己的信息资料输入,包括用户的号码,昵称 ,用户的资料,用户的性别,E-Mail,用户的籍贯等。
输出的数据流:用户信息表
处 理 频 率: 对每个用户基本信息表处理一次
处理逻辑名: 用户登录
说 明: 客户登录,进行网络聊天通信
处理逻辑编号: 2
输入的数据流: 用户名、密码
处 理 过 程: 服务器连接数据库,查询用户信息表,判断登录信息是否正确
输出的数据流: 服务器返回的登录处理数据流
处 理 频 率: 对每个用户基本信息表处理一次
处理逻辑名: 好友管理
说 明: 上线的用户根据自己需要进行查找好友,添加好友,删除好友,查看资料等操作
处理逻辑编号: 3
输入的数据流: 用户的相关操作信息
处 理 过 程: 根据用户提出的操作要求,连接服务器,进行数据库查询,得到符合条件的相关信息,服务器将结果返回给用户。
输 出 的数据流:服务器返回的相应处理结果
处 理 频 率: 依用户要求进行处理
处理逻辑名: 消息通信
说 明: 两个或多个用户通过连接服务器,进行网络通信
处理逻辑编号: 4
输入的数据流: 用户的发送消息或接收消息流。
处 理 过 程: 用户通过在好友列表中好友的IP地址,利用UDP协议与其他用户进行信息交流。
输出的数据流: 符合条件的发送(接收)消息流
处 理 频 率: 依用户要求进行处理
3 系统总体设计
3.1 系统开发的原则
3.1.1 面向用户的观点
网络即时通信系统是为用户开发研制的,用户是系统的最终使用者和评价者,所以在网络通信系统的开发设计的过程中,我们树立了从用户的寻求出发,面向用户,一切为了用户的观念,在分析与设计系统的前期,为了保证系统的功能的完善多次寻求周围同学和老师的意见,了解他们的要求,依照功能完善,界面美观,操作简单的原则进行设计 。
3.1.2 严格按阶段进行
系统的开发设计是一项较大的工程,所以应该将整个系统的开发设计过程划分为若干阶段,相应的阶段又要分为若干个不同的步骤,每个阶段和步骤都要有明确的工作任务和目标。这种有序的组织安排,条例清楚、层次分明,便于计划的制定和控制,且为后续工作的进行奠定了坚实的基础,提高了工作效率和质量。
3.1.3 采用系统的观点处理
在系统分析阶段,在对原系统进行全面调查和分析的基础上,构造系统的最佳逻辑模型,使用户对将来完整系统的轮廓有个初步的了解和认识,以便及时和用户进行交流和探讨,不断提高系统的完善性。在此基础上进行系统的物理实现和设计,切实完成逻辑模型的具体功能。逻辑设计和物理实现二者是相辅相成、密不可分的,这样使系统的设计更加稳妥合理。
3.1.4采用模块化设计方法
系统模块化设计方法是从计算机实现的角度出发对整个系统进行审核和校验,将整个系统划分为不同的功能模块,实现系统的一个特定功能。各个功能模块之间具有相对独立性,便于整个系统的设计、实施、维护和扩充。这种模块化结构设计方法,为整个系统顺利进行奠定了基础。
3.1.5 整个系统的设计主要采用快速原形法
快速原形法是信息系统设计的一个重要方法。它是根据用户提出的需求,由用户和开发者共同确定系统的基本要求和主要功能,并在一个较短的时间内建立一个实验性的、简单的信息系统模型,通过用户不断提出的意见和建议,对模型进行不断的修改和完善,直到用户比较满意为止,以便形成一个相对稳定、较为理想的管理信息系统。该方法的主要优点:
脉络清楚,所有问题都围绕一个模型展开,使彼此之间联系紧密。
有助于发现用户需求,通过对原形和用户接触,能够启发开发人员去挖掘问题,从而不断的修正、完善,最终得到一个理想的系统。
系统开发效率高,此方法的开发周期短、使用灵活、容易修改,这对于管理体制不够稳定的系统更加适合。
系统的可扩展性好,由于此方法是在原型应用中不断发展完善和修改的,所以有较强的扩展性。
3.2系统总体功能结构设计
3.2.1 系统代码设计说明
在进行代码设计时,遵循了以下原则:
唯一性 在本系统中,每一个代码都和系统中的每一个对象唯一确定。
标准性 主要体现在对程序文件名命名和对数据文件命名的标准化上,遵循简单扼要,方便适用的原则。一目了然,无重复现象。为了系统维护人员便于进行系统维护,使用了统一的标准。
合理性 系统中代码设计与编码对象的分类相适应,以使代码对编码对象的分类据有标志作用。
简单性 在设计过程中采用Code-Behind代码分离,使数据库操作代码和前端调用代码分离,页面修改容易。
适应性 在代码设计过程中,代码反映了编码对象的特点,便于识别和记忆,使系统维护人员容易了解和掌握,便于进行维护工作。
规范性 代码的结构,类型,格式统一,便于记忆和计算机进行处理。
可扩充性 考虑到今后程序扩充需要,在编制代码时,留有足够的备用代码。
3.2.2 系统设计技术说明
TCP/IP协议
TCP/IP协议是聊天工具在建立连接时使用的协议,该协议是网络中使用的通信协议,包括传输控制协议和网际协议,TCP/IP协议是网络互连的标准协议,可使不同环境下不同节点之间进行彼此通信,是连入互联网的所有计算机在网络上进行各种信息交换和传输所必须采用的协议。TCP/IP协议实际上是一种层次型协议,是一组协议的总称,它的内部包括很多协议,它们组成了TCP/IP协议组。
UDP协议
两个用户之间聊天期间使用的是UDP协议,UDP协议是用来在互联网络环境中提供包交换的计算机通信的协议,此协议默认为网络协议是其下层协议。此协议提供了向另一用户程序发送消息的最简便的协议机制。此协议是面向操作的,未提供提交和复制保护。因为聊天系统对于聊天期间的数据可靠性要求不高,所以使用UDP协议。
基于套接字(Socket)的编程
a) Socket用两种类型:在聊天工具程序中均有用处
TCP Socket:由Socket类实现
UDP Socket:由Datagram Socket类实现
b) 基于连接的流式Socket编程
Socket(套接字)是TCP/IP协议的编程接口,即利用Socket提供的一组API就可以编程实现TCP/IP协议,在Java语言里,这个编程接口就是若干系统预先定义好的类。
i. InetAddress类
InetAddress类主要用来区分计算机网络中的不同节点,即不同的计算机并对其寻址。每个InetAddress对象包含了IP地址,主机名信息。
ii. 流式Socket通信机制
流式Socket所完成的通信是一种基于连接的通信,即在通信开始之前先由通信双方确认身份并建立一条专用的虚拟连接通道,然后它们通过这条通道传送数据信息进行通信,当通信结束时再将原先所建立的连接拆除。这个通信过程如图所示:
图中Server端首先在某个端口提供一个监听Client请求的监听服务并处于监听状态,当Client端向该Server的这个端口提出服务请求时,Server端和Client端 就建立了一个连接和一条传输数据的通道。当通信结束时,这个连接通道被同时拆除。
基于连接的通信可以保证整个通信过程准确无误,但是连接的建立和拆除增加了程序复杂性,同时在通信过程中始终保持连接也会占用系统的内存等资源,所以只适合于集中的安全性要求高的通信。
c) 无连接的数据报UDP
数据报是无连接的通信服务,数据以独立的包为单位发送,不保证传送顺序和内容的准确性。数据报Socket又称为UDP套接字,它无须建立,拆除连接,直接将消息打包传给指定的目的地,使用起来比流式数据报要简单一些。
Java中用于无连接的数据包通信的类有两个:DatagramPacket类和DatagramSocket类。其中DatagramPacket类 用于读取数据等信息,DatagramSocket类用于实现数据报的发送和接收过程。
数据报的发送过程可简单表述如下:
创建DatagramPacket对象,使其中包含以下信息:
i. 要发送的数据
ii. 数据报分组长度
iii. 发送目的地的主机IP地址和目的端口号
在指定的或可用的本级端口创建DatagramSocket对象
调用该DatagramSocket的send()方法,以DatagramPacket对象为参数发送数据报。
数据报的接收过程描述如下:
创建一个用于接收数据报的DatagramPacket对象,其中包含空白数据缓冲区和指定数 据报分组长度。
在指定的或可用的本机端口创建DatagramSocket对象
调用DatagramSocket对象的receive()方法,以DatagramPacket 对象为参数接收数据报,接收到的信息有:
i. 收到的数据报文内容
ii. 发送端的主机IP地址
iii. 发送端主机发送端口号
3.2.3 系统总体功能结构
由客户端程序界面可知,本网络通信系统包含以下主要功能:
用户注册;用户登录;
上线通知;退出下线通知;
查找好友;查看好友资料;
直接添加好友;添加好友;添加好友应答;
删除好友;更新好友列表;
发送消息;接收好友消息;发送文件,接收文件,接收陌生人信息;
根据系统的要求,出功能模块图如下
3.3 系统数据库设计
数据库表主要用来存放用户的注册信息和用户的好友资料,可利用两张数据库表来 存放用户信息和用户好友的资料。表1 icq表存放用户信息,包括用户的号码,昵称,密码,在线与否,ip地址,资料,头像号,性别,E-mail和籍贯等信息。其中,用户昵称和密码是必需的字段;在线与否是由系统自动设置的;其余的信息是可选的字段。
表1:用户的基本信息表(icq)
3.4开发环境设计与运行环境设计
3.4.1 开发环境设计
本课题整体以JAVA为平台,采用Eclipse开发工具,并使用SQL Server 2000管理数据库数据开发而成的基于Socket的集中式网络通信系统,系统采用客户机/服务器(C/S)的模式设计,是一个三层C/S结构,数据库服务器、应用程序服务器端 、应用程序客户端。系统采用C/S结构,可以将任务合理分配到客户机端和服务器端 ,从而降低了系统的通信开销。
- . 客户层 (应用表示层)
客户层是应用程序的用户接口部分,它担负着用户与应用间的对话功能,用于检查用户的输入数据,显示应用的输出数据,为了直观的进行操作,客户层需要使用图形用户接口,若聊天用户变更,系统只需改写显示控制和数据检查程序即可,而不会影响其他两层。 - .服务层(功能层)
服务层相当于应用的本体,它是将具体的业务处理逻辑编入程序中。在应用设计中,必须避免在表示层和功能层之间进行多次的数据交换,这就需要尽可能进行一次性的业务处理达到优化整体设计的目的。 - .数据层
数据层是DBMS,本系统使用了Microsoft 公司的SQL Ssever2000数据库服务器来管理数据。SQL Ssever2000能迅速的执行大量数据的更新和检索,因此,从功能层传送到数据层的要求一般都使用SQL语言。其分层结构如图所示:
3.4.2 运行环境设计
因为本系统是用Eclipse工具来开发的,所以首先要安装Eclipse开发工具。Eclipse开发工具可以安装在任何操作系统上,本课题是在Windows 系统下安装的Eclipse,在安装之前,要先安装Java的JDK(或运行环境JRE)来支持Eclipse的运行。本系统的安装环境为:Windows XP中文版+JDK1.4.2_06+Eclipse3.1.1。
说明:在Windows系统下安装Eclipse不需要设置JDK环境变量。为了使用方便 ,把JDK和Eclipse都安装在C盘目录下。
4 服务器模块设计
4.1 主服务器类设计
省略
4.2 多线程ServerThread类的设计
-
ServerThread函数执行过程可描述如下:
执行ServerThread(Socket s)线程构造函数
执行socket=s 取得传递函数
使用BufferedReader(new InputStreamReader(socket.getInputStream()))创建数据流
使用PrintWriter(new BufferedWriter(new OutputStreamWrite(socket.getOutputStream())))创建输出流
使用start()函数启动线程
最后使用run()线程监听函数。 -
设计说明: run()函数用于监听已经建立连接的线程。
具体实现代码如下:
class ServerThread extends Thread{ //继承线程
private Socket socket; //定义套接口
private BufferedReader in; //定义输入流
private PrintWriter out; //定义输出流
int no;//定义申请的jicq号码
public ServerThread(Socket s) throws IOException { //线程构造函数
socket=s;//取得传递参数
in=new BufferedReader(new InputStreamReader(socket.getInputStream())); //创建输入流
out=new PrintWriter (new BufferedWriter (new OutputStreamWriter
(socket.getOutputStream ())), true);
start();}//启动线程
4.3 用户注册模块
- 新建用户是网络聊天工具的一个基本功能,用户新建过程如下:
首先在客户端填写用户相关注册信息,点击“注册”按钮
然后发送“new”新建请求,连接服务器。
服务器利用run()函数监听到来自客户端的请求,使用Class.forname方法加载数据库驱动类。
然后使用DriverManager.getConnection 方法连接数据库
最后服务器接收客户端用户发送的号码,昵称,密码,用户E-Mail。个人资料,籍贯 和性别,头像等信息,执行数据库添加操作完成用户的创建。 - 用户注册流程如下:
4.4 登录验证模块设计
4.4.1登录线程设计
-
用户登录流程表述如下:
客户端在登录窗口输入登录号码和登录密码,点击“登录”按钮。
客户端发送“login”请求,表示需要登录,连接服务器。
服务器run()函数监听到该信息后,连接数据库,准备从数据库中选择昵称和密码。
服务器接收到客户端发送过来的号码和密码信息后,设定数据库查寻条件,并执行数据库查寻,比较输入的用户名和密码和数据库中信息是否相符,如果相符则表示登录成功,并弹出登录后的主窗口。否则,则出现信息出错提示框。提示框如图所示:
-
用户登录流程如图所示:
4.4.2 通知好友上线模块
服务器首先连接数据库,再根据“我的号码”从好友列表中得到我的好友列表,然后利用广播通知他们我已经上线了。
通知好友上线模块流程如图所示:
4.5 好友管理模块
4.5.1 查找好友模块
当客户端向服务器发送查找好友的请求后,服务器立即响应并调用Class.forname 方法加载数据库驱动类sun.jdbc.odbc.JdbcOdbcDriver , 然后调DriverManager.getConnection完成数据库的连接,得到好友查询的结果。查询结果包括:好友的昵称,头像信息,性别,籍贯,E-Mail,个人资料等。客户端接收到查询结果后,利用响应的函数将其显示出来。
4.5.2 查看好友资料模块
用户在得到好友列表后,可根据需要读取好友的详细资料。查看好友资料功能是在查找好友功能的基础是建立的。当客户点击“查看资料”菜单子项时,客户主程序监听到用户的操作要求,同时调用void lookinfo_mousePressed(MouseEvent e)事件处理程序,把已经用Vector矢量保存好的好友号码,昵称,性别, IP地址,状态,头像和个人资料信息返回给客户。
4.5.3 直接添加好友模块
客户端发送“addnewfriend”请求,连接服务器,服务器根据客户端发来的用户号码和用户想要添加的好友的号码进行数据库操作,直接将该号码添加到用户的好友表中,而不需要经过被添加的用户的同意。
4.5.4 添加好友模块
- 添加好友的步骤如下:
客户端用户点击“加为好友”按钮,向服务器端发送“addfriend”请求。
服务器响应客户端用户的请求后,首先连接数据库,并根据接收的用户号码在fiend表中查询用户所有的好友号码,如果接收的用户想要添加的好友号码已经是好友的列表,则向客户端发送“same”应答,在客户端将弹出“该用户已经是你的好友的提示框 ”
如果该用户想要添加的好友未在用户好友表中,则根据接收的用户号码和好友号码向好友表添加记录,服务器使用r6保存查询结果,若r6为1,则表明添加成功,服务器将向客户端发出“ok addfriend”消息,否则,添加好友失败,服务器将给客户端发出“false addfriend”的消息。 - 添加好友流程如下:
4.5.5 添加好友应答模块
如果用户A将用户B加为好友,则弹出提示框“用户A已经把你加为好友”。用户B可以选择添加A为好友,也可以选择不加。
如果用户B选择添加A为自己的好友,则向服务器发送“addnewfriend”请求
服务器收到请求后,连接数据库,根据接收的用户号码以及好友号码向好友表添加记录。若添加成功,则服务器利用r5保存处理结果,比如昵称,号码,性别等信息,并向客户端输出结果。
4.5.6 删除好友模块
首先,点击“删除好友”按钮,响应函数将首先向数据库发送“delfriend”请求,同时发送用户的号码(myjicq)和想要删除的好友号码(friendjicq),其中用户的号码是在登录时创建主窗口时获得的,要删除的好友号码利用list.getSelectedIndex()这个索引获得。
当服务器接收到客户端的删除好友请求后了,它连接数据库,并根据接收的用户号码以及好友号码将好友表中记录删除。服务器利用r7保存删除结果。若r7为1,则删除成功,服务器给客户端发出“ok delfriend”的消息;否则删除好友失败,服务器给客户端发出“false delfriend”的消息。
在发送请求给数据库的同时,客户端需要在好友列表中利用list.removeElementAt(index)方法把好友的头像以及昵称信息也删除掉。
4.6 退出下线模块
用户在线时,数据库表的IP地址字段为此时用户计算机的IP地址;状态字段status
为1,若用户退出下线,服务器完成修改IP字段和状态字段。服务器首先利用Class.forName方法加载数据库驱动类sun.jdbd.odbc.JdbcOdbcDriver; 然后用DriverManager.getConnection连接数据库。最后根据用户号码,将其状态字段设为0,IP地址字段设为空。
5 客户端模块设计
客户通过Socket与服务器建立连接。服务器与客户都通过构造BufferedReader、PrintWriter来建立输入/输出流。双方通过该输入/输出流来互相传递消息。一旦收到客户端的连接请求,服务器利用accept()函数返回一个新建的Socket对象,随后客户端向服务器发送消息,诸如用户注册,登录请求、查找好友请求等。服务器收到请求后,针对不同的消息处理请求。
5.1新用户注册模块
5.1.1 注册流程
当服务器收到用户注册请求后,开始接收客户传递的消息,诸如客户的号码,昵称,密码,性别,头像,个人资料等等信息。接收完毕后,服务器通过JdbcOdbc与后台数据库连接,向数据库添加记录。
若新用户注册成功,则向客户返回号码,并在数据库中注册用户的IP地址,设定status值告知用户在线(Status为1)。客户收到服务器返回的信息后,打开主窗口,同时创建UDP以便在用户之间建立联系。
5.1.2 注册事件监听流程
-
注册事件处理是客户端注册的主要部分。Java事件包括键盘事件,鼠标事件和按钮等事件。而所用到的是鼠标事件实际就是点鼠标按钮时,系统会调用监听器,包括mousePressed,mouseReleased,mouseClicked。监听流程如图所示:
-
注册按钮实现代码:
void jButton1_mouseClicked(MouseEvent e) {
try { System.out.println(sername);
System.out.println (serverport);
Socket socket=new Socket (InetAddress.getByName (sername), serverport);
//连接服务器
BufferedReader in=new BufferedReader (new InputStreamReader (socket.getInputStream ()));
PrintWriter out=new PrintWriter (new BufferedWriter (
new OutputStreamWriter (socket.getOutputStream ())), true);
out.println("new");//发送新建用户请求
out.println (icqno.getText ().trim ());
out.println(nickname.getText().trim()); //发送昵称等信息
out.println (password.getPassword ());
out.println (email.getText ().trim ());
out.println (info.getText ().trim ());
out.println (place.getSelectedItem ());
out.println (headpic.getSelectedIndex ());
int no;
no=Integer.parseInt(in.readLine());
System.out.print (no);
String str=" ";
//do{
str=in.readLine().trim();//从服务器读取信息
//如果出错
if(str.equals("false")) JOptionPane.showMessageDialog(this,"对不起,出错了:-(","ok",JOptionPane.INFORMATION_MESSAGE);
else{//如果成功就告诉用户其号码
JOptionPane.showMessageDialog(this,"恭喜您,您已经成功注册!您的注册号码是:"+no,"ok",JOptionPane.INFORMATION_MESSAGE);
this.dispose();//并打开主窗口
MainWin f2=new MainWin (no, sername, serverport);
f2.setVisible (true) ;}
} catch (IOException e1) {} //捕获IO异常
}
5.2 用户登录模块
用户登录首先要与服务器连接,服务器的连接是在ConnectServer(int myid)函数中实现。本函数用到了具有连续性,有序性特点的流(Stream),根据服务器的ip地址和端口来完成客户端和服务器端的连接。ip地址是网络唯一的地址标识。
客户端连接流程:
程序初始化
填写服务器地址信息和端口信息,建立客户端socket,并定义输入流和输出流
连接服务器,向服务器发出输出流out.println(“friend”),out.println(myid)即发出查询好友信息的请求,用户在登录窗口的好友列表中显示好友的头像和昵称。
读取服务器端信息,将这些信息用变量数组保存,直到接收到从服务器返回的信息(over)才停止读取,利用循环语句根据接收到好友的状态信息判断好友在线与否,更新好友的列表,在列表中显示众好友的头像和昵称,同时在这个通信过程中,catch函数捕获异常
通信结束后断开连接
创建用户客户端之间消息通信的CreatUDP( )函数,函数体中包括发送数据报和接收数据报sendSocket=new DatagramSocket();receive Socket=new DatagramSocket(udpPORT)其中发送数据报是利用public DatagramSocket( )构造函数创建,并将它连接到本地主机的任何一个可用的端口上,而接收数据报是利用new DatagramSocket(int port)在指定端口创建。
调用FindFriend2类,并创建该类的实例
创建并启动线程Thread,监听服务器端与客户端消息以及客户端与客户端之间的通信消息,
捕获通信过程中的异常
客户端登录流程如下:
5.2.1 监听登录事件
- 用户在客户端程序中输入用户号码和密码,与服务器连接,向服务器发送登录请求。
- 服务器收到该请求后,通过JdbcOdbc读取数据库,与用户输入的信息作比较,若用户输入的信息与数据库相同,则服务器向用户返回成功信息,将其status字段设为1,并注册用户当前使用的ip地址,否则服务器向客户返回登录失败的消息。客户端收到服务器的成功确认后,打开聊天主窗口,否则弹出失败信息。
- 若登录成功,系统弹出聊天主窗口,在主窗口中需要显示用户的好友列表(包含好友的昵称,头像和在线与否的状态信息),此时,客户端需连接服务器,并向服务器发送“friend”请求,要求读取好友信息。服务器经过相关操作后将返回用户的所有好友的信息,客户端通过相关相应函数,将在窗口中显示用户的好友。若显示的好友列表中好友的头像是灰色的,则代表该好友目前没有在线,若是彩色,则代表他(她)在线。
- 登录事件监听流程如图所示:
5.2.2 界面设计
用户向登录界面输入自己的号码和密码,服务器地址和端口。服务器地址和端口是默认的,端口默认为8080,填写登录信息后,单击[登录]按钮,密码验证后完成登录过程。
登录界面如图所示:
用户完成登录后,客户端与服务器端建立连接,连接建立成功后,客户向服务器请求读取好友名单,服务器收到该请求,开始读取数据库中的friend表并得到好友的号码,再通过icq表读取好友的资料,向客户端发送这些信息,客户收到服务器信息后,在主窗口显示好友(即好友的头像和昵称)。客户端还建立矢量(Vector)来储存好友昵称,jicq号码,头像编号,以及ip地址等消息。
5.2.3 设计过程中遇到的问题
在设计登录界面时,由于界面继承了JPanel类,而JPanel类又默认为不透明的面板,所以在加背景图的时候,总是显示一个灰色的面板,面板上的组件都显示不出来,后经过不断的调试,不断的查找问题,才终于弄明白,要在JPanel面板上加背景图片,首先要将组件的放在一个面板上,并且此面板要设置Opaque属性为false,再重新构造一个继承了JPanel类的面板类,并在重载paintComponent方法时调用超类super.paintComponent()方法将不透明面板的背景擦除,再将背景图片绘制在这个面板上,之后再将放置组件的面板添加到此面板上,这样才能实现系统设计的登录界面。
登录后界面:
5.3 消息通信模块
省略
5.4 好友管理模块
省略
6用户手册
6.1 系统的运行环境
省略
6.2 系统的功能简介
由客户端程序界面可知,本网络通信系统包含以下主要功能:
用户注册;
用户登录;上下线通知;
查找好友;查看好友资料;
添加好友;直接添加好友;添加好友应答;删除好友;
好友列表;更新好友列表;
发送消息;接收消息;发送文件,接收文件,接收陌生人信息;
6.3 系统的运行和操作指南
省略
7 系统特色与不足
7.1 系统特色
本系统是应用计算机网络通信技术和JAVA网络编程的基础知识,利用Eclipse开发工具开发而成的一个小型的基于JAVA的Web通信系统。
系统采用客户机/服务器(C/S)的模式设计,是一个三层C/S结构,数据库服务器 、应用程序服务器端、应用程序客户端,按照此设计思想,系统采用C/S结构,可以将任务合理分配到客户机端和服务器端 ,从而降低了系统的通信开销。系统设计主要应用了TCP/IP协议,UDP协议和Socket套接字以及Java多线程机制编程技术。
Eclipse安装包集成了Java开发环境的插件JDT,所以Eclipse默认是一个和JBuilder类似的Java开发工具,但Eclipse并不仅仅是Java开发工具,我们只需安装C/C++插件(简称CDT),它就可以作为C/C++开发工具来使用。只要有相应的插件就可以作为其他语言的开发工具。另外,Eclipse是开放源代码的软件,它可以使我们阅读到最顶级的Java源代码,学习最优秀的Java技术。
7.2 系统不足
省略
7.3 设计收获和心得
省略
结 论
省略
致 谢
省略
参 考 文 献
[1] Chad Darby,John Griffin.网络编程指南.北京:电子工业出版社,2002(3).
[2] 杨绍方.Java编程应用技术与案例.北京:清华大学出版社,2000(11).
[3] 张晓东,JAVA数据库高级教程.北京:清华大学出版社,2000(2).
[4] David M.Geary.Java2图形设计卷二:SWING.北京:机械工业出版社,2003(1).
[5] Elliotte Rusty Harold.Java 网络编程.第3版.北京:中国电力出版社,2005(2).
[6] 宋现锋.趣味程序导学Java2.北京:清华大学出版社,2002(1).
[7] 萨师煊,王珊.数据库系统导论(第三版).北京:高等教育出版社,2000(2).
[8] 印旻.Java与面向对象程序设计教程.北京:高等教育出版社,2000(9).
[9] 刘亚滨,杨红,精通Eclipse.北京:电子工业出版社,2004(6).
[10] 张筑生.Eclipse编程技巧与实例.北京:清华大学研究所,2005(5).
[11] 陈刚.Eclipse从入门到精通.北京:清华大学出版社,2005(6).
[12] 宁书林,李凯,许新龙.Java2程序设计技能百练.北京:中国铁道出版社,2004(8).
[13] 孙一林,彭波.Java网络编程实例.北京:清华大学出版社,2003(6).
[14] 谢希仁.计算机网络第四版.电子工业出版社,2004(6).
[15] 飞思科技产品研发中心.Java TCP/IP 应用开发详解.电子工业出版社,2002(1).
[16] 夏创业,邓劲生.新型Socket应用编程接口技术.国防科技大学,2005(3).
[17] 朱喜福,郭逢昌,赵玺.Java 网络应用编程入门.人民邮电出版社,2005(5).
[18] 旺晓平,俞俊,李功.Java网络编程.北京:清华大学出版社,2005(9).
5、资源下载
本项目源码及完整论文如下,有需要的朋友可以点击进行下载。如果链接失效可点击下方卡片扫码自助下载。
序号 | 毕业设计全套资源(点击下载) |
---|---|
本项目源码 | 基于java+Socket+sqlserver的网络通信系统设计与实现(源码+文档)_java_Socket_CS架构_网络通信系统.zip |