




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android即时通讯工具详细设计南昌航空大学东软班 详细设计报告 版本:0.1.0总页数 正文 附录 生效日期编制 批准南昌航空大学东软班 详细设计报告 版本:0.1.0修 改 履 历修改编号 日期 修改人 版本号 修改内容1 0.1.0 初始做成南昌航空大学东软班 详细设计报告 版本:0.1.0目 录1 文档概述 .31.1 文档目的和范围 .31.2 术语/缩略语 .41.3 参考文档 .42 处理 .42.1 系统总体流程图 .42.2 系统客户端流程图 .42.3 代码编写 .52.3.1 服务器端程序编写 .52.3.2 客户端程序编写1 文档概述1.1 文档目的和范围此文档是对 Android 即时通讯工具整个工作原理的详细设计描述,主要是描述了实现南昌航空大学东软班 详细设计报告 版本:0.1.0整个通讯过程的部分代码和流程图1.2 术语 /缩略语序号 术语/缩略语 说明1 客户端/服务器 信息通讯两端2 SOCKET 实现信息的发送与接收1.3 参考文档1 孟凡荣数据库原理与应用中国矿业大学,2009( 8)28-302 张虹软件工程与软件开发工具清华大学出版社2009(1)55-753 Bruce EckelThinking in Java机械工业出版社2009(6)42-644 罗军舟等 TCP/IP 协议及网络编程技术清华大学出版社2008(10)5 孙一林,彭波Java 网络编程实例清华大学出版社2003(4)6 李树青Java 通用范例开发金典电子工业出版社20097 王鹏Java Swing 图形界面开发与案例详解清华大学出版社20088 庞永庆,翟鹏Java 完全自学宝典清华大学出版社20089 刘永华,于春花Java 网络编程清华大学出版社200810 Boost Documentation, 或 11 Boost.Asio Documentation, 12 孙桂兰.电子商务网上书店系统.北京:人民邮电出版社,200413 Jalote P.Optimum control limits for employing statistical process control in software process. IEEE Trans on Software Engineering,2002,28(12)14 萨师煊,王珊.数据库系统概述.第三版.北京:高等教育出版社, 2004. 15 B. Ford, M.I.T., P. Srisuresh, etc. Peer-to-Peer (P2P) communication across middleboxes. /draft-ford-midcom-p2p-01.txt 200416 飞思科技产品研发中心. Java 2 应用开发指南J. 北京:电子工业出版社, 200217 薛为民, 夏文红, 解仑.Java 应用教程 北京:北京交通大学出版社 200518 南昌航空大学东软班 详细设计报告 版本:0.1.019 /20 /21 /tech/article1101.html2 处理2.1 系统总体流程图图 4-1 系统总体流程图2.2 系统客户端流程图开始启动服务器判断启动信息启动客户端判断登录信息登录服务器退出服务器注册用户结束否是是开始客户端登录判断主界面聊天界面 好友信息界面 个人信息界面退出结束南昌航空大学东软班 详细设计报告 版本:0.1.0图 4-2 客户端流程图2.3 服务器及客户端程序编写2.3.1 编写服务器端程序 问题陈述1. 能过接收用户注册信息并保存。2. 能够允许注册过的用户登录聊天界面。3. 能够与在线好友进行自由聊天。4. 服务器运行在自定义的端口 60005 上。5. 服务器监控用户列表和对用户消息进行转发。6. 服务器对用户的请求作出处理。7. 服务器对在线下线列表进行更新。 解决方案 .1 后台数据库设计基于服务器跨平台运行的架构,服务器的后台数据库使用了 SQL Server2005。南昌航空大学东软班 详细设计报告 版本:0.1.0(1)userInfo 表:userInfo 表此表主要包含了用户帐户基本信息。即时通讯系统采用账户、密码的登录方式,给每个用户生成一个唯一 ID 来做系统内部的用户标识。(2)friend 表friend 表此表主要包含了用户好友 ID 关系信息。.2 用户注册1.去数据库读数据首先创建一个字符串连接并写入查询命令,利用 dataset 保存临时数据,留作后面注册时用。 南昌航空大学东软班 详细设计报告 版本:0.1.02.客户端请求注册客户端通过 RegisterActivity.java 请求注册,填写注册信息,并验证各项信息格式是否符合规定,如果不符合规定格式,则进行提示重新填写,最后将请求信息发送给服务器端。下面是注册验证账户代码:3.服务器端响应服务器端得到注册请求会将对象输入流转化为文件输出流,并反馈给客户端。客户端得到注册信息后会在前台填写注册信息,然后创建文件输出流,再用对象输出流包装后写入本地文件将其持久化。最后关闭对象输出流和文件输入流。/ 将向量中的类写回文件FileOutputStream file = new FileOutputStream(fList);南昌航空大学东软班 详细设计报告 版本:0.1.0ObjectOutputStream objout = new ObjectOutputStream(file);objout.writeObject(vList);4.给客户端返回信息将用户注册成功或失败的信息用打印流包装 Socket 以后,输出给客户端注册结果的详细信息。/ 发送注册成功信息toClient.println(clientMessage.custName + 注册成功);Date t = new Date();log(用户 + clientMessage.custName + 注册成功, + 注册时间:+ t.toLocaleString() + n);5.关闭 Socket 连接当以上的程序都正常运行后,需要关闭 Socket 连接,否则将会浪费服务器与客户端之间的资源。.3 用户登陆1.去数据库读用户数据打开用户数据库文件“User.txt”,将用户数据对象集载入内存,以供下面的程序使用。/ 读文件FileInputStream file3 = new FileInputStream(user.txt);ObjectInputStream objInput1 = new ObjectInputStream(file3);vList = (Vector) objInput1.readObject();2.验证用户名是否存在在对象数据库中查找是否有与登录用户的用户名相同的记录,如果有继续验证,否则退出验证处理,返回“没有此用户”错误用户登陆程序模块如下:if (reg.custName.equals(clientMessage2.custName) find = 1;if (!reg.custPassword.equals(clientMessage2.custPassword) toClient.println(密码不正确);南昌航空大学东软班 详细设计报告 版本:0.1.0break; else / 判断是否已经登录int login_flag = 0;for (int a = 0; a = 50) toClient.println(登录人数过多,请稍候再试);break;.4 用户退出1.接收退出信息当用户退出时,客户端将会用基于 Socket 的对象输出流发送给服务器退出对象。2.在线列表中删除用户用户退出后应该把用户从在线列表中删除,否则用户退出用户还在在线列表中,那么该用户下次将会无法登录。3.更新在线列表用户退出后将服务器端监控界面的用户列表更新。否则用户数据将会不同步。用户退出模块程序:public void serverExit() Exit exit = new Exit();exit = (Exit) obj;南昌航空大学东软班 详细设计报告 版本:0.1.0removeUser(exit);/ chenminif (sFrame.ti.equals(exit.exitname) sFrame.ti = ;Date t = new Date();log(用户 + exit.exitname + 已经退出, + 退出时间: + t.toLocaleString();freshServerUserList();.5 接收用户聊天信息1.接收用户聊天信息当用户发送聊天信息时,服务端将会收到客户端用 Socket 传输过来的聊天信息对象,然后将其强制转换为 Chat 对象。2.过滤用户聊天内容的非法信息分析聊天信息对象的聊天内容,用语言过滤类将非法字符过滤掉。语言过滤的时候将会打开“badword.txt”文件,不允许出现的关键词将会存储在文件中,关键字之间以逗号分割。当聊天内容中出现要过渡的关键字是将会被系统屏蔽,而聊天内容3.接收服务器端的系统消息当有其他用户登陆时,系统会给在线的所有用户发送用户登陆信息,并且通过服务器可以给各用户发送系统消息。系统消息发出后,如再有登录者也可以接收到系统消息。4.返回给客户端当以上信息都封装成功后,打开与客户端连接的 Socket 的输出流,然后再用 ObjectOutputStream 对象输出流包装后输出给客户端。public void serverChat() / 将接收到的对象值赋给聊天信息的序列化对象Chat cObj = new Chat();cObj = (Chat) obj;南昌航空大学东软班 详细设计报告 版本:0.1.0/ chenmincObj.chatMessage = WordFilter.filter(cObj.chatMessage);chatLog(cObj);/ 将聊天信息的序列化对象填加到保存聊天信息的矢量中userChat.addElement(Chat) cObj);return;2.3.2 客户端程序编写程序将通过 Register.java 用户注册界面收集用户的用户名、密码、年龄、电子邮箱。如图 4- 客户端用户注册信息模块程序:/连接到服务器Socket toServer;toServer = new Socket(strServerIp,1001);ObjectOutputStream streamToServer=new ObjectOutputStream (toServer.getOutputStream();/写客户详细资料到服务器socketstreamToServer.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();南昌航空大学东软班 详细设计报告 版本:0.1.0pwdUserPassword.setText();pwdConfirmPass.setText();txtAge.setText();txtEmail.setText();2.3.2 用户登录 收集用户登录信息 程序将通过 Login.java 用户登录界面收集用户的用户名、密码,如图图 4-15 收集用户登录信息图/ 接受客户的详细资料try / 连接到服务器Socket toServer;toServer = new Socket(strServerIp, 1001);ObjectOutputStream streamToServer = new ObjectOutputStream(toServer.getOutputStream();/ 写客户详细资料到服务器socketstreamToServer.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();/ 关闭流对象南昌航空大学东软班 详细设计报告 版本:0.1.0streamToServer.close();fromServer.close();toServer.close(); else JOptionPane.showMessageDialog(null, status);streamToServer.close();fromServer.close();toServer.close(); / login()结束聊天室当用户登录成功后,用户的登录界面将会隐藏,然后创建用户聊天室窗口,在界面的标题栏将会显示当前登录用户的用户名,以防止一个机器上的用户开多个账号进入聊天室后分不清哪个窗口是哪个用户登录的,界面第一行将显示当前在线人数。位于界面正中的两个控件分别是 List 和 TextBox 用来显示当前服务器上的在线会员名单列表和公共聊天信息。位于界面下方的就是一些用于聊天的功能控件和聊天内容个性化配置控件。包括聊天对象,聊天语气,聊天内容,聊天字体,风格,大小,颜色. 用户发送信息用户需要发送信息时,在聊天内容里写下要发送的信息,然后点击发送就可以发送到其他客户端,也可以选择私聊,聊天表情,聊天信息通过服务器发送到其他客户端。如图:南昌航空大学东软班 详细设计报告 版本:0.1.0当多个用户同时在线时可以对某个人私聊,而第三个人的聊天界面会被屏蔽掉。/ 发送 按钮public void sendMessage() Chat chatobj = new Chat();chatobj.chatUser = strLoginName;chatobj.chatMessage = txtMessage.getText();chatobj.chatToUser = String.valueOf(cmbUser.getSelectedItem();chatobj.whisper = chPrivateChat.isSelected() ? true : false;chatobj.emote = emote.getSelectedItem().toString();/ 向服务器发送信息南昌航空大学东软班 详细设计报告 版本:0.1.0try 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();南昌航空大学东软班 详细设计报告 版本:0.1.0fileoutput.close();JOptionPane.showMessageDialog(null, 聊天记录保存在 + this.strLoginName+ _message.txt); catch (Exception e) System.out.println(e); 显示系统时间当用户需要查看当前时间时,可以直接点击“时钟”按钮,将会启动一个漂亮的电子时钟,时钟模块程序:public void actionPerformed(ActionEvent e) timer.restart();public void paint( Graphics g ) Insets insets = getInsets();南昌航空大学东软班 详细设计报告 版本:0.1.0int 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; 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);南昌航空大学东软班 详细设计报告 版本:0.1.0old_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(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河南建业房子的施工方案
- 女神节形体活动策划方案
- 天猫运动营销方案设计
- 拆阳台施工方案怎么写
- 农安医疗建筑方案设计服务
- 减垄增地施工方案
- 城市红色建筑调色方案设计
- 榆林聚仙禄宾馆专线项目竣工报告
- 水果甜品店营销方案模板
- 教师资格证考试(高中数学)教育知识与能力专项训练试卷2025
- 医德医风护理培训
- 钢筋修复方案
- 《危险货物港口作业重大事故隐患判定标准》知识培训
- 海外优青-申请书模板(3篇)
- 农村废弃物综合利用资源化利用方式与路径
- 销售技巧培训(完整)
- 悬浮地板施工方案
- 中药白芷简介
- 核保考试非车险试题库完整
- 2024-2030年中国电船行业趋势预测及投融资分析报告
- 【桂科版】《综合实践活动》五上 第4课《平安伴我行·常见的安全事故》课件
评论
0/150
提交评论