




免费预览已结束,剩余22页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
- 1 - 商丘工学院 毕业论文(设计) 题目:局域网聊天软件 系 院: 学生姓名: 学 号: 专 业:软件技术 指导教师: 2013 年 4 月 i 摘 要 在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网 络,由此而产生的聊天工具越来越多,例如,国外的 icq、国内腾讯公司开发 的 oicq。基于 java 网络编程的强大功能,本次毕业设计使用 java 编写一个聊 天系统。 一般来说,聊天工具大多数由客户端程序和服务器程序外加服务器端用于 存放客户数据的数据库组成,本系统采用客户机/服务器架构模式通过 java 提 供的 socket 类来连接客户机和服务器并使客户机和服务器之间相互通信,由于 聊天是多点对多点的而 java 提供的多线程功能用多线程可完成多点对多点的聊 天,数据库管理系统用 sql server2000 完成并通过 jdbc-odbc 桥访问数据库。 本系统建立在 java 平台上,系统的设计使用了面向对象技术和面向对象的 设计原则。系统采用 c/s 结构,客户端与客户端以及客户端与服务器端之间通 过 socket 传送消息。使用 java 语言编写,开发工具采用 eclipse。服务器端 设计与实现过程中,采用了多线程技术,可以在单个程序当中同时运行多个不 同的线程,执行不同的任务。大大增强了程序对服务器资源的利用。 聊天系统完成后将可进行多人对多人的聊天,对好友进行添加、删除,对 新用户的注册,发送消息、接受消息等等功能。 关键字:多线程 ;客户机/服务器 ;java ; socket ; eclipse ; 局域网聊天软件 ii 目 录 第一章 需求分析 .1 1.1 可行性分析 1 1.1.1 可行性分析 1 1.1.2 系统功能需求 .1 1.1.3 系统性能需求 2 1.1.4 系统运行需求 .2 1.2 数据流图 2 1.2.1 顶层数据流图 2 1.2.2 一层数据流图 .3 第二章 概要设计 .4 2.1 系统实现原理 4 2.2 系统实现层次图: .5 2.3 各模块详细功能 5 2.3.1 服务器端结构 .5 2.3.2 客户端结构 6 第三章 详细设计 .7 3.1 系统流程图 7 3.1.1 系统总体流程图 7 3.1.2 系统客户端流程图 .8 3.2 编写服务器端程序 8 3.2.1 问题陈述 8 3.2.2 解决方案 .9 3.3 客户端程序编写 .13 3.3.1 用户登录 .13 3.3.2 收集用户登录信息 13 3.3.3 聊天室 .14 结 论 20 参考文献 .21 致谢 .22 1 第一章 需求分析 1.1 可行性分析 1.1.1 可行性分析 经济可行性:由于本系统的主要背景是毕业课程设计,不注重直接的经济效 益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也 不高,只要有一台能运行 java 软件的电脑便可,所以不用考虑到经济问题。 技术可行性: 本系统的开发利用 microsoft sql server2000 作为本系统的 数据库,它是一个支持多用户的新型数据库,适用于大中规模的数据量需求。学 校校园网的建设也为新系统服务器/客户端的结构提供了硬件的支持。使用 jav a 作为系统开发的开发环境,它提供完善的指令控制语句、类与对象的支持及丰 富的数据类型,给开发高性能系统提供的保障为开发满足客户要求的系统,保证 了代码的模块化要求,而代码模块化的提高,非常有利于以后对新系统的扩展与 修改。 运行可行性: 本系统为一个小型的局域网聊天系统,所耗费的资源非常的小,现 在一般的电脑无论是硬件还是软件都能够满足条件,因此,本系统在运行上是可 行的。 综上所述,本系统的设计与开发在技术上和硬件设备上的条件都是满足的 因此,它在技术上是可行的。 1.1.2 系统功能需求 本系统主要通过客户端,服务器端来体现聊天系统的基本功能。 (1)服务器端 1.处理用户注册 2.处理用户登录 3.处理用户发送信息,服务器监控聊天内容,服务器过滤非法内容 4.处理用户得到信息 5.处理用户退出 8. 服务器踢人。 9. 保存服务器日志。 10.保存用户聊天信息。 (2)客户端 1.用户注册界面及结果 2.用户登录界面及结果 3.用户发送信息界面及结果 局域网聊天软件 2 4.用户得到信息界面及结果 5.用户退出界面及结果 1.1.3 系统性能需求 实用性:为局域网聊天提供方便,有效进行作业管理。 操作简单:本系统应该适用于不同水平的使用者,包括事业单位和企业单 位,同时系统不应太复杂和烦琐,因此要求系统的操作尽可能简单易行。 技术先进:产品的系统设计和开发应紧跟着整个计算机发展潮流,采用当 时最先进的设计思想,利用最新的开发技术和开发工具。使系统能够无论在功 能设计上,还是在技术实现上,都处于同行业的领先地位。 安装使用简便:服务器端的安装简洁明了,客户机无需再装任何软件就可 以直接注册登陆聊天。 适应性:应该能广泛应用于不同类型的企事业单位。系统采用模块化设计, 用户可以根据自己的实际情况自行组合,使系统在不同的硬件环境下都能得以 应用。 代码可读性好:文中的代码将尽可能简洁,易懂。 1.1.4 系统运行需求 运行环境:windows 9x、2000、xp、2003,linux 必要环境:jdk 1.5 以上 硬件环境:cpu 400mhz 以上,内存 64mb 以上 1.2 数据流图 1.2.1 顶层数据流图 聊天用户 局域网多 人聊天系 统 聊天用户 图 2-1 顶层数据流图 3 1.2.2 一层数据流图 . 聊天用户 聊天用户 客户端 服务器端 写聊天信息 返回 读取 返回 提交 反馈 存储 图 2-2 一层数据流图 1.2.3 二层数据流图 用户 客户端 服务器端 用户注 册 用户登录 用户发送 信息 聊天内容 非法内容 用户得到 的信息 处理用户 退出 服务器日志 数据聊天信息 保存 保存 处理 监控 屏蔽 图 2-3 系统二层数据流图 局域网聊天软件 4 第二章 概要设计 2.1 系统实现原理 聊天系统的设计跟普通网站设计有着许多不同的地方,普通网站设计所考 虑的因素,例如,普通网站需要对布局进入大量美化以及动画设计等等,而聊 天室只要提供满足访客双方直接实时聊天即可。因此,在设计聊天系统的过程 中,必须要考虑好以下几个设计要点: 在 internet 上的聊天程序一般都是以服务器提供服务端连接响应,使用者 通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这 是一个面向连接的通信过程。因此,程序要在 tcp/ip 环境下,实现服务器端和 客户端两部分程序。 图 3-1 系统实现原理图 5 2.2 系统实现层次图: 局域网多人聊天 系统 客户端 服务器端 与聊 天室 成员 私聊 可以 改变 聊天 内容 风格 用户 注册 ( 含 头像 )、 登录 服 务 器 发 送 通 知 服 务 器 踢 人 保 存 服 务 器 日 志 保 存 用 户 聊 天 信 息 服 务 器 过 滤 非 法 内 容 服 务 器 监 控 聊 天 内 容 聊天 室成 员一 起聊 天 时 钟 功 能 图 3-2 系统实现层次图 2.3 各模块详细功能 2.3.1 服务器端结构 图 3-3 服务器端结构图 局域网聊天软件 6 serveframe.java 为服务器端程序界面,负责为服务器的启动提供界面服务。 appserver.java 为服务器端启动界面,负责监听服务器的状态,在线人数, 最多在线人数,服务器名称,访问协议,服务器 ip,服务器端口以及用户信息 的管理,日志的保存。 connection.java 是连接服务器和客户端的桥梁,主要负责将客户端的信息传 送给服务器,并将服务器端的信息反馈给客户端,即所谓的“三次握手”。也 是 socket 编程的重要部分。 wordfilter.java 负责将聊天过程中不合法的话语文件等过滤掉,返回合法内 容。 2.3.2 客户端结构 图 3-4 客户端结构图 chatclient.java 为客户端程序启动类,负责客户端的启动和退出。 login.java 为客户端程序登录界面,负责用户帐号信息的验证与反馈。 register.java 为客户端程序注册界面,负责用户帐号信息的注册验证与反馈。 chatroom.java 为客户端程序聊天室主界面,负责接收、发送聊天内容与服务 器端的 connection.java 亲密合作。 windowclose 为 chatroom.java 的内部类,负责监听聊天室界面的操作,当用 户退出时返回给服务器信息。 clock.java 为客户端程序的一个小程序,实现的一个石英钟功能。 7 第三章 详细设计 3.1 系统流程图 3.1.1 系统总体流程图 开始 启动服务器 判断启动信息 启动客户端 判断登录信息 登录聊天室 退出聊天室 结束 是 是 注册用户 退出服务器 否 是 否 图 4-1 系统总体流程图 局域网聊天软件 8 3.1.2 系统客户端流程图 开始 客户端登录界面 聊天室界面 清屏 聊天内容 时钟 保存 聊天对象 字体颜色 表情 退出 结束 图 4-2 客户端流程图 3.2 编写服务器端程序 3.2.1 问题陈述 1. 接受用户注册信息并保存在一个基于文件的对象型数据库。 2. 能够允许注册过的用户登录聊天界面并可以聊天。 3.2.2 能够接受私聊信息并发送给特定的用户。 4. 服务器运行在自定义的端口上 1001. 5. 服务器监控用户列表和用户聊天信息(除私聊外) 。 6. 服务器踢人,发送通知。 9 7. 服务器保存日志。 3.2.2 解决方案 后台数据库设计 基于服务器跨平台运行的构想,服务器的后台数据库使用了 sql server2000。 (1)login 表: login 表 (2)register 表 register 表 此表主要包含了用户帐户基本信息。 聊天系统采用用户名作为用户帐号,并给每个用户生成一个唯一 id 来做系 统内部的用户标识。 3.2.2 用户注册 1.去数据库读数据 首先创建一个 file 文件类,载入“user.txt”,再用对象输入流 objectinputstream 将用户信息导入到系统中。 2.客户端请求注册 客户端通过 register.java 请求注册,填写注册信息,并验证密码是否符合 规定,是否两次输入一致,如不一致会提示重新输入,最后将请求信息发送给 服务器端。 int flag = 0; / 是否重名判断标志 register_customer clientmessage = (register_customer) obj; file flist = new file(“user.txt“); 局域网聊天软件 10 if (flist.length() != 0)/ 判断是否是第一个注册用户 objectinputstream objinput = new objectinputstream( new fileinputstream(flist); vlist = (vector) objinput.readobject(); / 判断是否有重名 for (int i = 0; i = 50) toclient.println(“登录人数过多,请稍候再试“); break; 用户退出 1.接收退出信息 当用户退出时,客户端将会用基于 socket 的对象输出流发送给服务器退出 对象。 2.在线列表中删除用户 用户退出后应该把用户从在线列表中删除,否则用户退出用户还在在线列表 中,那么该用户下次将会无法登录。 局域网聊天软件 12 3.更新在线列表 用户退出后将服务器端监控界面的用户列表更新。否则用户数据将会不同步。 用户退出模块程序: public void serverexit() exit exit = new exit(); exit = (exit) obj; removeuser(exit); / chenmin if (sframe.ti.equals(exit.exitname) sframe.ti = “; date t = new date(); log(“用户“ + exit.exitname + “已经退出, “ + “退出时间:“ + t.tolocalestring(); freshserveruserlist(); 接收用户聊天信息 1.接收用户聊天信息 当用户发送聊天信息时,服务端将会收到客户端用 socket 传输过来的聊天 信息对象,然后将其强制转换为 chat 对象。 2.过滤用户聊天内容的非法信息 分析聊天信息对象的聊天内容,用语言过滤类将非法字符过滤掉。语言过滤 的时候将会打开“badword.txt”文件,不允许出现的关键词将会存储在文件中, 关键字之间以逗号分割。当聊天内容中出现要过渡的关键字是将会被系统屏蔽, 而聊天内容 3.接收服务器端的系统消息 当有其他用户登陆时,系统会给在线的所有用户发送用户登陆信息,并且通 过服务器可以给各用户发送系统消息。系统消息发出后,如再有登录者也可以 接收到系统消息。 4.返回给客户端 当以上信息都封装成功后,打开与客户端连接的 socket 的输出流,然后再 用 objectoutputstream 对象输出流包装后输出给客户端。 public void serverchat() / 将接收到的对象值赋给聊天信息的序列化对象 chat cobj = new chat(); cobj = (chat) obj; / chenmin cobj.chatmessage = 13 wordfilter.filter(cobj.chatmessage); chatlog(cobj); / 将聊天信息的序列化对象填加到保存聊天信息的矢量中 userchat.addelement(chat) cobj); return; 3.3 客户端程序编写 程序将通过 register.java 用户注册界面收集用户的用户名、密码、年龄、 电子邮箱。如图 4-7 客户端用户注册信息模块程序: /连接到服务器 socket toserver; toserver = new socket(strserverip,1001); objectoutputstream streamtoserver=new objectoutputstream (toserver.getoutputstream(); /写客户详细资料到服务器 socket streamtoserver.writeobject(register_customer)data); /读来自服务器 socket 的登陆状态 bufferedreader fromserver=new bufferedreader(new inputstreamreader(toserver.getinputstream(); string status=fromserver.readline(); /显示成功消息 joptionpane op=new joptionpane(); op.showmessagedialog(null,status); if(status.equals(data.custname+“注册成功“) txtusername.settext(“); pwduserpassword.settext(“); pwdconfirmpass.settext(“); txtage.settext(“); txtemail.settext(“); 3.3.1 用户登录 3.3.2 收集用户登录信息 程序将通过 login.java 用户登录界面收集用户的用户名、密码,如图 图 4-15 收集用户登录信息图 / 接受客户的详细资料 局域网聊天软件 14 try / 连接到服务器 socket toserver; toserver = new socket(strserverip, 1001); objectoutputstream streamtoserver = new objectoutputstream(toserver.getoutputstream(); / 写客户详细资料到服务器 socket streamtoserver.writeobject(customer) data); / 读来自服务器 socket 的登录状态 bufferedreader fromserver = new bufferedreader( new inputstreamreader(toserver.getinputstream(); string status = fromserver.readline(); if (status.equals(“登录成功“) new chatroom(string) data.custname, strserverip); this.dispose(); / 关闭流对象 streamtoserver.close(); fromserver.close(); toserver.close(); else joptionpane.showmessagedialog(null, status); streamtoserver.close(); fromserver.close(); toserver.close(); / login()结束 3.3.3 聊天室 当用户登录成功后,用户的登录界面将会隐藏,然后创建用户聊天室窗口, 在界面的标题栏将会显示当前登录用户的用户名,以防止一个机器上的用户开 多个账号进入聊天室后分不清哪个窗口是哪个用户登录的,界面第一行将显示 当前在线人数。位于界面正中的两个控件分别是 list 和 textbox 用来显示当前 服务器上的在线会员名单列表和公共聊天信息。 位于界面下方的就是一些用于聊天的功能控件和聊天内容个性化配置控件。 包括聊天对象,聊天语气,聊天内容,聊天字体,风格,大小,颜色. 用户发送信息 15 用户需要发送信息时,在聊天内容里写下要发送的信息,然后点击发送就 可以发送到其他客户端,也可以选择私聊,聊天表情,聊天信息通过服务器发 送到其他客户端。如图: 当多个用户同时在线时可以对某个人私聊,而第三个人的聊天界面会被屏蔽掉。 / “发送 “按钮 public void sendmessage() chat chatobj = new chat(); chatobj.chatuser = strloginname; chatobj.chatmessage = txtmessage.gettext(); chatobj.chattouser = string.valueof(cmbuser.getselecteditem(); 局域网聊天软件 16 chatobj.whisper = chprivatechat.isselected() ? true : false; chatobj.emote = emote.getselecteditem().tostring(); / 向服务器发送信息 try socket toserver = new socket(strserverip, 1001); objectoutputstream outobj = new objectoutputstream(toserver .getoutputstream(); outobj.writeobject(chatobj); txtmessage.settext(“); / 清空文本框 outobj.close(); toserver.close(); catch (exception e) / sendmessage()结束 保存聊天记录 当用户需要保存聊天记录时可以直接点击“保存”按钮,为了防止多用户 聊天记录文件冲突问题,聊天记录将会以“用户名_message.txt”为文件名, 将信息保存在当前应用程序目录下。如图 保持模块程序: / “保存“按钮 public void savemessage() try fileoutputstream fileoutput = new fileoutputstream( this.strloginname + “_message.txt“, true); string temp = tausermessage.gettext(); / system.out.println(temp); fileoutput.write(temp.getbytes(); fileoutput.close(); joptionpane.showmessagedialog(null, “聊天记录保存在“ + this.strloginname + “_message.txt“); catch (exception e) system.out.println(e); 17 显示系统时间 当用户需要查看当前时间时,可以直接点击“时钟”按钮,将会启动一个 漂亮的电子时钟, 时钟模块程序: public void actionperformed(actionevent e) timer.restart(); public void paint( graphics g ) insets insets = getinsets(); int l0 = (insets.left)/2, t0 = (insets.top)/2; int hh,mm,ss; string st; h=getsize().height; /绘制圆形 /获取时间 calendar now=calendar.getinstance(); hh=now.get(calendar.hour_of_day);/小时 mm=now.get(calendar.minute);/分钟 ss=now.get(calendar.second);/ 秒 g.setcolor(color.pink); g.fillrect(l0,t0,60,28);/填充的矩形 g.setcolor(color.blue); if (hh 10) st=“0“+hh; else st=“+hh; 局域网聊天软件 18 if (mm 10) st=st+“:0“+mm; else st=st+“:“+mm; if (ss 10) st=st+“:0“+ss; else st=st+“:“+ss; g.drawstring(st,l0,t0+25); /计算时间和图形的关系 sdo=90-ss*6; mdo=90-mm*6; hdo=90-hh*30-mm/2; /擦除秒针 /绘制秒针 g.setcolor(color.yellow); x=(int)(r-8)*math.cos(rad*sdo)+x0); y=(int)(r-8)*math.sin(rad*sdo)+y0)-2*t0; g.drawline(x0,y0,x,(h-y); old_x=x; old_y=y; /绘制分针 line(g,mdo,(int)(r*0.7),color.green); /绘制时针 line(g,hdo,(int)(r*0.5),color.red); / end paint 图 4-22 屏蔽聊天信息 filereader filereader = new filereader(files); bufferedreader read = new bufferedreader(filereader); while (true) string line = read.readline(); if (line = null) break; 19 filestring += (line); / filestring += (line + “n“); read.close(); / system.out.println(filestring); catch (filenotfoundexception e) / todo 自动生成 catch 块 e.printstacktrace(); catch (ioexception e) / todo 自动生成 catch 块 e.printstacktrace(); return filestring; 3.3.6 退出聊天系统 当前用户点击“退出”按钮或者关闭窗口时,系统将会把用户退出的信息 打包成对象发送给服务器,并退出客户端程序。 / “退出“按钮 public void exit() exit exit = new exit(); exit.exitname = strloginname; / 发送退出信息 try socket toserver = new socket(strserverip, 1001); / 向服务器发送信息 objectoutputstream outobj = new objectoutputstream(toserver .getoutputstream(); outobj.writeobject(exit); outobj.close(); toserver.close(); frmchat.dispose(); / this.destroy(); catch (exception e) private void exitchatroom() exit(); 出现异常信息 局域网聊天软件 20 在用户聊天时,当服务器关闭或者与服务器无法连接时,客户端将会给出 “不能连接到服务器!”的信息。并在用户查看后退出客户端。 结 论 通过这次的毕业作业,使自己在 java 编程语言的使用方面得到一个全面锻 炼自己的机会,在这个模块的界面开发方面,充分的学习和利用了 java swing 界面开发技术,使自己在界面应用和布局方面得到更多的实践,应用 socket 技 术实现网络连接功能,对网络的实现和通信方面有了进一步的理解,并通过多 线程方面的应用,使客户端和服务端可以实现多任务功能,在整个开发过程当 中应用软件工程的开发步骤,使自己专业理论知识的到进一步的巩固,项目开 发经验有不少的收获。 (一) 软件存在的问题 软件已经编写好了,但是还有许多可以改进的地方;同时还存在着一些小 问题。 还有一些功能上的缺陷,这里我列举一下,并提出一些解决的办法,希望 以后可以改进。 操作的方便性、比如可以为一些常用按钮设置快捷键,象登入系统时, 输入完用户名和密码后直接回车;在用户输入完要发送的内容时,设置发送内 容的快捷方式 ctrl+回车等。 (2)在功能方面可以进一步增加,如实现用户间的文件传输,并可以进行 视屏,共享音乐等高级功能。 (3)执行效率方面可以有待提高,优化代码结构,减少系统内存泄露,提 高运行稳定性等 (二)使界面变得更加美观 由于一直专注于功能的实现,从而忽略了界面的设计,本软件今后可以为用 户添加不同的头像,并可以使窗体风格更合理和更美观,并且要使用户有更多 的自定义功能,设置自己的喜好和风格。 21 通过完成这次毕业设计的项目,使自己在项目实际开发方面有了进一步的提高, 并使自己感觉到成功的喜悦,并对自己在专业的未来发展更充满信心,对自己 在今后的工作中有更好的帮助。 局域网聊天软件 22 参考文献 1 孟凡荣数据库原理与应用中国矿业大学,2009(8)28-30 2 张虹软件工程与软件开发工具清华大学出版社2009(1)55-75 3 bruce eckelthinking in java机械工业出版社2009(6)42-64 4 罗军舟等 tcp/ip 协议及网络编程技术清华大学出版社2008(10) 5 孙一林,彭波java 网络编程实例清华大学出版社2003(4) 6 李树青java 通用范例开发金典电子工业出版社2009 7 王鹏java swing 图形界面开发与案例详解清华大学出版社2008 8 庞永庆,翟鹏java 完全自学宝典清华大学出版社2008 9 刘永华,于春花java 网络编程清华大学出版社2008 10 boost documentation, 或 http:/boos
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 油务工专业理论考试题及参考答案
- 专业摄影测量与遥感习题及答案
- 呼叫中心服务员-初级工考试题及参考答案
- 2025届山西省部分学校高三4月模拟考试(省二模)生物试题(原卷版+解析版)
- 江苏省南京市五校联盟2024-2025学年高二下学期4月期中地理试题(原卷版+解析版)
- 批发业消费者行为分析与研究考核试卷
- 畜禽粪便处理与农业废弃物循环利用考卷考核试卷
- 租赁店铺的顾客满意度提升实践考核试卷
- 聚苯并噻吩改性与加工技术考核试卷
- 聚合纤维的绿色生产与可持续发展考核试卷
- 液化天然气接收站安全管理规定
- GB/T 23468-2009坠落防护装备安全使用规范
- 影像诊断与手术后符合率统计表
- 2023年北京亦庄国际投资发展有限公司招聘笔试题库及答案解析
- ansys电磁场分析经典教程
- 美国数学竞赛AMC8讲座课件
- 2020年国家义务教育质量测查德育科目模块一模拟试题含参考答案
- 导管固定-PPT课件
- 服务器、存储、网络及安全设备visio图标系列PPT课件
- 《历史文献学》教学大纲
- 农村信用社助农金融服务终端管理办法
评论
0/150
提交评论