版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录1. 选题背景12. 开发技术概述13. 功能需求分析14. 功能设计24.1 登录界面功能表24.2 注册界面功能表34.3 聊天界面功能表44.4 文件功能表55. 系统流程分析55.1 系统总体设计流程图55.2 详细设计流程图66. 界面设计96.1 登录界面96.2 注册界面96.3 聊天界面107. 系统测试118. 关键代码说明13小结16参考文献171. 选题背景在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多.目前国内外做即时通讯软件的公司很多,产品也琳琅满目,国内有诸如腾讯QQ、新浪UC、网易泡泡、淘宝旺旺等,国外有著名的
2、MSN(新版改名为LiveMessenger)以及跨平台的米聊等。QQ是国内即时通讯软件市场上无可争议的“老大”,您使用QQ可以与好友交流,信息及时发送,及时回复,收发及时功能全面。QQ与国外最大的即时通讯软件MSN功能强大,但它们唯一不足的地方就是必须要联网或者下载到它们的服务端,否则无法脱离Internet使用。本聊天系统,是可以在局域网聊天的一个工具。无需联网,即可进行群聊。所以也存在局限性,只有在同一局域网内的用户才能聊天交流,除此之外,该系统未设置私聊功能。2. 开发技术概述 本系统采用java技术开发,使用文件保存数据,集成开发环境使用eclipse。开发者应有java程序设计语言
3、、SWING基本GUI组件、多线程、文件使用、socket编程、使用eclipse的基本知识和技能。系统采用两层c/s体系结构,c端负责通过GUI与客户交互,实现注册、登录、收发信息、退出等功能;c端和s端是通过网络交互的。 首先服务器启动,建立一个专门用于接收客户端请求的”倾听Socket”,然后等待客户的连接请求。当客户想聊天时,从界面输入信息,然后与服务器建立Socket连接,服务器端的“倾听Socket”收到连接请求后,一般会接收连接请求,并生成一个服务器端socket,专门负责与此客户端socket的通信。一旦连接请求成功,通过I/O流来实现数据的输入输出。用多线程来实现多人聊天功能
4、。3. 功能需求分析使得第一次使用的用户可以通过填写个人信息来注册,已注册用户可以在验证他的登录信息后登录,允许在线用户查看其他在线用户的列表,允许用户在公共聊天室中聊天。客户端和用户端的需求如下: a.客户端 (1)用户注册界面及结果 (2)用户登录界面及结果 (3)用户发送信息及结果 (4)用户得到信息及结果 (5)用户退出界面及结果 b.服务器端 (1)处理用户注册 (2)处理用户登录 (3)处理用户发送信息 (4)处理用户退出 (5)保存服务器日志 (6)保存用户聊天信息4. 功能设计4.1 登录界面功能表 表4-1登录功能表序号功能内容控件对象名备注1.用户名输入框JTextFiel
5、dtextfield2.密码输入框JPasswordField password3.登录JButtonb14. 取消 JButtonb25.注册JButtonb36.存放组件的容器JPanelP1存放b1 b2 b37.盒式容器Box baseBox存box1 box28.盒式容器Box box1 box29.标签JLabel标记用户名 密码4.2 注册界面功能表表4-2注册功能表序号功能内容控件对象名备注1.用户名输入框TextFieldtextfield12.密码输入框TextFieldPw13.确认密码输入框TextField Pw24.年龄输入框TextFieldtextfield25
6、.复选框 男JCheckBoxC1选定6.复选框 女JCheckBoxC27.注册按钮JButtonbsubmit8.取消按钮JButtonbcancel9.存放组件的容器JPanelP1存放信息10.存放组件的容器JPanelP2存放两个提交 取消按钮11.存放组件的容器JPanelP3存放性别选项4.3 聊天界面功能表表4-3聊天功能表序号功能内容控件对象名备注12.聊天内容显示框TextAreatextareaMessage13.用户列表显示框TextAreatextareaList14.发送内容输入框TextFieldtextfield15.用户列表标签JLabel userlist1
7、6.聊天室标签JLabelchatroom17.退出按钮JButtonbuttonout18.发送按钮JButtonbuttonsent19.存放组件的容器JPanel panelout存放退出按钮20.存放组件的容器JPanelp21.显示指定组件内容JScrollPanemessagepaneltextareaMessage22.显示指定组件内容JScrollPanelistpaneltextareaList23.显示指定组件内容JScrollPanesendpaneltextfield24.格式布局GridBagLayout()25.GridBagLayout 类布置的组件的约束Grid
8、BagConstraintsbgc4.4 文件功能表表4-4文件功能表序号功能内容控件对象名备注1.指定流里面读取对象ObjectInputStreambr2.从流里读取内容getInputStream3.文件写PrintWriter pw4.读对象readObject5.客户端套接字SocketfromClient建立连接6.服务器端套接字ServerSocketserver建立连接5. 系统流程分析 5.1 系统总体设计流程图 聊天应用程序包括登录界面和注册界面,当启动登录界面,用户填写信息后登录,登录的信息将反馈给聊天服务器,服务器验证用户信息,若验证成功则跳到聊天界面,否则,服务器反馈
9、给登录界面拒绝登录消息。启动注册界面,用户在界面填写注册信息,注册信息反馈给服务器,服务器要验证用户信息,验证成功,跳到登录界面,否则,服务器反馈给注册界面,显示错误消息。 图 5-1系统总体流程图5.2 详细设计流程图 1. 服务器结构 服务器端,处理用户的请求,当收到“来自定时器”消息时,服务器给客户反馈,客户端在聊天界面更新消息和在线用户信息;服务器收到“登录信息”请求时,验证登录信息,验证成功则更新聊天界面里的消息和在线用户信息,否则给客户端反馈“用户不存在”消息;当服务器端接收到“注册消息”请求时,服务器验证注册信息,若验证成功,将注册信息写入文件保存,并反馈给客户端“注册成功”信息
10、,跳到登录界面,否则在注册界面给客户端反馈“用户已经存在”消息。图5-2服务器结构流程图2. 客户端结构 登录界面,将登录消息发送给聊天服务器,聊天服务器验证登录消息,如果验证成功将“欢迎”消息发送给登录界面,登录界面向用户显示聊天界面;如果验证不成功,则将拒绝消息发送给登录界面,登录界面显示错误对话框。注册界面,同登录界面。 图5-3登录界面流程图 聊天界面,服务器接收“来自定时器”的消息,随时更新消息和在线用户信息,若用户在聊天界面中单击“发送”按钮,服务器接收用户“发送”请求,服务器将用户的发送信息保存,向聊天界面,若用户退出,服务器收到用户“用户退出”请求,将在线列表中删除用户,并更新
11、聊天界面里的消息和在线用户信息。图5-4聊天界面流程图6. 界面设计6.1 登录界面 运行Login.java程序会出现如下界面。图6-1登录界面6.2 注册界面运行Resigter.java可出现如下界面,注册信息时,用户名不能为中文,程序采用了RandomAccessFile来随机读取文件,为单独设置类来处理中文字符,用户若注册用户名信息含有中文将无法读取,尽管注册成功,登录时将报错:用户名或密码错误。图6-2注册界面6.3 聊天界面 用户先注册,在登录,登录成功可以出现如下界面。图6-3聊天界面7. 系统测试 用户xiaowang和wang注册后登录聊天室,xiaowang在聊天室里发送
12、消息:你好;wang发送消息:好。两个用户都能看到彼此所发的信息。 图7-1系统测试图7-2系统测试8. 关键代码说明表8-1关键代码表序号事件内容事件名对象名1登录JButtonb12注册JButtonb23聊天JButtonb34发送JButtonbuttonsentpublic Connect(Socket inFromClient) / 建立一个用户/vcList = new Vector();String msg = ;String mesg = ;try / 服务器端先读再写streamFromClient = new BufferedReader(new InputStreamR
13、eader(inFromClient.getInputStream();/System.out.println(客户端连接成功);streamtoClient = new ObjectOutputStream(inFromClient.getOutputStream();/System.out.println(服务器反馈信息给用户);msg = streamFromClient.readLine();System.out.println(从客户获得的信息为: + msg);if (msg.equals(来自定时器) streamtoClient.writeObject(vector);/ 将指
14、定的对象写入 / ObjectOutputStreamstreamtoClient.writeObject(vcList);else if (msg.equals(登录消息) msg = streamFromClient.readLine();System.out.println(客户信息为: + msg);int ver = verify(msg);System.out.println(验证消息为: + ver);if (ver = 1) String colon = new String(:);int index = msg.lastIndexOf(colon);String userna
15、me = msg.substring(0, index);System.out.println(usernaem-+username);if (!(vcList.indexOf(username) = 0) / 如果用户列表中不存在该用户则在列表中添加该用户streamtoClient.writeObject(欢迎);/ addElement将指定的组件添加到此向量的末尾,将其大小增加/ 1。如果向量的大小比容量大,则增大其容量。vcList.addElement(String)username);System.out.println(用户列表人数为:+vcList.size(); else
16、/已经登录了streamtoClient.writeObject(欢迎);/System.out.println(用户列表人数为:+vcList.size();streamtoClient.writeObject(拒绝登录);/ 给客户端反馈信息 else streamtoClient.writeObject(该用户不存在);else if (msg.equals(注册消息) msg = streamFromClient.readLine();System.out.println(从客户端接收的信息为: + msg);int ret = checkFile(msg);System.out.pr
17、intln(用户存在为0 + ret);if (ret = 0) streamtoClient.writeObject(用户已经存在);if (ret = 1) / 创建在文件中写入的文件流System.out.println( 在文件中写入信息);FileOutputStream out = new FileOutputStream(UsrPwd.txt,true);PrintStream p = new PrintStream(out);p.println();p.println(msg);p.close();streamtoClient.writeObject(注册成功);System.
18、out.println( 注册成功);else if (msg.equals(用户退出) System.out.println( 用户退出);String remuser = streamFromClient.readLine();/boolean b = vcList.removeElement(remuser);/移除退出用户vcList.removeElement(remuser);else /发送信息message = message + msg;System.out.println(message: + message);vector.addElement(message);/向聊天
19、列表中添加用户发送的聊天信息streamtoClient.writeObject(vector);/反馈给用户现在的 向量集合catch (Exception e1) e1.printStackTrace();System.out.println(无法获取客户端的流对象 + e1);/ try.catch结束finally try inFromClient.close(); catch (IOException e2) e2.printStackTrace();System.out.println(发生异常 + e2); 小结 本次系统设计总结,我将对我在做这次系统设计中遇到过的问题以及新学的
20、内容进行总结。本系统的登录界面,我采用了Box容器来排版界面格式,注册界面与聊天界面采用了GirdBagLayout()布局格式,来排版界面。用Vector类来实现添加、删除用户的操作,Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。用RandomAccessFile来实现文件内容的读取,RandomAccessFile创建从中读取和向其中写入的随机访问文件流,类里面有getFilePointer方法来返回文件中的当前偏移量,到此文件开头的偏移量,在该位置发生下一个读取或写入操作。采用objectOutpu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 送配电线路检修工复测知识考核试卷含答案
- 球团原料工安全应急模拟考核试卷含答案
- 影视烟火特效员创新方法评优考核试卷含答案
- 重冶固体原料输送工安全专项模拟考核试卷含答案
- 2026年新科教版初中九年级科学下册第一单元生物遗传规律应用卷含答案
- 铸轧工安全检查模拟考核试卷含答案
- 重冶配液工风险评估与管理考核试卷含答案
- 武夷学院《C语言程序设计》课件-第1章C语言概述
- 新药临床试验中的多中心协作伦理规范
- 新材料行业职业病危害因素的识别与监测数据
- 2026年及未来5年市场数据中国戒烟产品行业市场深度研究及投资战略规划报告
- 简阳市中小企业融资担保有限公司2026年招聘金融科技部工作人员等岗位笔试参考题库及答案解析
- 2026上海市闵行区区管国企招聘42人备考题库含答案详解(精练)
- 输变电工程可行性研究内容深度规定(2025版)
- 2026中国疾病预防控制中心人事处招聘工作人员笔试备考试题及答案
- 2025年内蒙古鄂尔多斯市康巴什区事业单位考试题及答案解析
- 培训餐厅服务员
- 2026年工业无人机焊接技术报告
- 《城市体检工作手册》(试行)下载
- 2025年甘肃钢铁职业技术学院辅导员考试真题
- 屋顶光伏施工技术规范
评论
0/150
提交评论