我的java开发文档

  • 格式:doc
  • 大小:214.49 KB
  • 文档页数:15

java开发文档 名称:网络聊天室 开发人员:刘军令、刘晶 刘军令 09网络 2009011920 本系统是java基于c/s模式的聊天室程序。聊天室共分为服务器端和客户端两个部分,服务器端程序主要负责侦听客户端发来的消息,客户端需要登录到服务器端才能实现正常的聊天功能。 服务器端:服务器与客户间通过套接口Socket(TCP)连接。Java API为处理套接口的通信提供了一个类java.net.Socket.,使得编写网络应用程序相对容易.服务器采用多线程以满足多用户的请求,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为1001,然后无限循环调用accept()方法接受客户程序的连接。

客户端:客户通过Socket(InetAddress,port)建立与服务器的连接。服务器与客户都通过构造ObjectInputStream、PrintStream来建立输入输出流,然后双方通过该输入输出流来相互传递信息,一旦收到客户方的连接请求,服务器accept()方法返回一个新建的Socket对象。客户端然后向服务器发送消息,比如注册,登录等,服务器收到来自客户的请求后,针对不同的消息处理请求。

一、需求分析 为了满足人们网络聊天的需求,作为一个即时聊天系统,本程序需要实现的功能包括服务器端的功能和客户端的功能。其中服务器端需要能够处理用户注册、登录、聊天、监控聊天内容、过滤非法信息。客户端需要能够得到用户登录界面及结果、用户注册界面及结果、用户聊天界面及结果、用户退出功能。

本程序实现的功能有: 1、服务器端 a. 在特定端口上进行侦听,等待客户端连接。 c. 可以显示用户的聊天信息并向已经连接的客户端发送系统消息。 d. 统计当前在线人数。 f. 保存服务器日志到指定文件。 g. 显示在线用户列表并执行踢人操作。 2、客户端:

a. 首次使用程序执行注册操作,设定昵称、密码、头像、邮箱等个人信息。 b. 已经注册用户可执行登陆操作。 c. 登陆界面之后、用户可看到在线用户列表,根据个人需求选择群聊(对所有人发送消息)或选择在线用户中一人进行私聊。 d. 为了丰富用户的视觉感官、满足其需求,在聊天界面用户可根据喜好更改聊天对话框的字体、大小、颜色及样式。 e. 用户可根据需求对聊天窗口进行清屏操作。 f. 用户可以将聊天记录保存到本地指定的文件夹。 g. 为方便用户操作,特添加快捷键操作,如“发送”为CTRL+N,“退出”为CTRL+X。 二、结构图 用户注册:首次登陆用户设置自己的昵称、密码、头像等个人信息 用户登陆:在服务端开启的情况下,已注册用户通过验证昵称、密码等信息与服务其进行连接登入聊天界面 用户接受和发送消息:通过与服务器的连接在线用户间进行群聊或私聊、发送信息并且接受到别的用户发送的消息 显示在线用户列表:显示所有登陆的用户列表 用户设置:根据用户需求进行字体等的设置 退出:关闭所有聊天并退出客户端

聊天室 客户端

用户 注册 用户 登陆 用户接受和发送消息 显示在线用户列表 用户设置

退出 启动服务:启动服务器,并开始在设置的端口中监听,客户端用户可以登陆并开始聊天 退出服务:关闭服务器,监听结束,客户端不能再聊天 发送系统消息:服务器端给所有用户发送消息 显示消息记录:可以显示所有用户的聊天记录和上线、下线信息 用户管理:服务器端可以根据在线用户列表执行“踢人”操作 端口服务:开放特定端口1001进行服务 服务器端:

聊天室 服务器端

启动服务 用户管理 端口服务 显示消息记录 发送 系统消息 退出服务 AppServer.java为服务器端启动界面,负责监服务器的状态,在线人数,最多在线人数,服务器名称,访问协议,服务器IP,服务器端口以及用户信息的管理,日志的保存。

ServerFrame.java为服务器端程序界面,负责为服务器的启动提供界面服务。

Connection.java是连接服务器和客户端的桥梁,主要负责将客户端的信息传送给服务器,并将服务器端的信息反馈给客户端。

WordFilter.java负责将聊天过程中不合法的话语文件等过滤掉。 客户端:

AppServer 启动服务器监听

ServerFrame 服务器监听控制窗体 Connection 处理所有用户请求

WordFilter 聊天内容过滤体 ChatClient.java为客户端程序启动类,负责客户端的启动和退出。 Login.java为客户端程序登陆界面,负责用户账号信息的验证与反馈 Register.java为客户端程序注册界面,负责用户账号信息的注册验证与反馈

Chatroom.java为客户端程序聊天室主界面,负责接收、发送聊天内容与服务器端的Connection.java合作

Clock.java为客户端程序的一个小程序,实现一个钟表的功能

三、主要模块的程序流程图 用户注册流程:

ChatClient 启动客户端

Login 用户登陆窗体 Register 用户注册窗体

ChatRoom 用户聊天窗体 Clock 时钟窗体 用户登陆流程:

ChatClient 启动客户端 Login用户登陆窗体

ChatRoom

用户聊天主窗体

用户窗体监听器

Register用户注册窗体

Register-custome 注册用户数据类型

发送注册信息

Connection处理所有用户请求 AppServer启动服务器监听

ServerFrame服务器监听控制窗体 用户聊天流程图:

ChatClient启动客户端 Login用户登录窗体 Register 用户注册窗体 ChatRoom 聊天主窗体

用户窗体监听器

发送用户登陆信息

Customer 登录用户数据类型

Connection 处理所有用户请求 AppServer 启动服务 器监听

ServerFrame服务器监听窗体 ChatClient启动客户端 Login用户登录窗体

Register 用户注册窗体

ChatRoom 聊天主窗体

用户窗体监听器

Chat 聊天数据类型 Message 聊天数据类型

Connection 处理所有用户请求 Wordfilter AppServer 启动服务器监听

ServerFrame 服务器控制监听窗体 总体流程图: 开始启动服务器

判断启动信息启动客户端判断登录信息登录聊天室退出聊天室结束是是注册用户

退出服务器否

四、开发过程中遇到的主要问题及解决方法 1、怎样使服务器端能够设置登录聊天室的上线最多人数 解决方法:经过思考要实现这个功能首先要使服务器端能够响应键盘的编辑,然后在客户登录时读取服务器端编辑的最大人数值并用if语句加以判断是否超过人数上限来决定能否登陆。具体代码如下:ServerFrame.java: Connection.java在ServerLogin()方法中添加if语句如下: 2、怎样实现键盘快捷键功能 解决方法:通过查类库手册知道可以用javax.swing.AbstractButton中的setMnemonic()方法设置当前模型上的键盘助记符。助记符是某种键,Alt组合时将激活此按钮。 助记符不区分大小写,所以具有相应键代码的键事件将造成按钮被激活,不管是否按下 Shift 修饰符。如果在按钮的标签字符串中发现由助记符定义的字符,则第一个出现的助记符将是带下划线的,以向用户指示该助记符。 例如为服务器界面上的保存日志按钮添加键盘快捷键功能代码为:

3、实现用户保存聊天记录时文件名自定义 解决方法:JOptionPane 有助于方便地弹出要求用户提供值或向其发出通知的标准对话框,利用该对话框使用户可以输入自定义文件名,然后将文件保存在程序规定的指定位置。在触发保存按钮时调用saveMassage()方法,在该方法中添加如下语句

五、没有实现的需求及其原因 未能实现查看好友资料功能、未能实现发送图片表情 原因:时间有限、要实现实现在原有程序基础上改动到理想的功能要做较大的改动,来不及完成这两项的修改。 六、 心得体会 1 暑假抄写计算器是我对java的面向对象有了基本的感觉,但是通过这次考试,我最深的感觉是:编程最重要的不是语言怎么写,或者功能怎么实现,而程序的算法。 也真正地体会到你的那句话:“你如果能用大白话把一个程序的运行过程清晰、完整地表述出来,你就可以用java把它写出来了。” 的确如此,最重要的是你的程序的逻辑,java语言本身只是实现的方式,是次要的。 2 网络是很重要的资源,几乎什么问题都可以通过网络自己解决,记得张孝祥老师说:“你不用了解每个类、每个方法,当用到的时候查看一下java document就行了”,以前我认为这个观点很对,并一直按照这个方法学java。通过这次考试我发现了一个更好的java学习方式:网络! 就是说有什么问题都通过网络解决。(当然,在有一定的语言基础上) 3 以前只是一个人写程序,而且写得都是称不上程序的小段代码;现在和刘晶合作写这个聊天室(相对而言大一点的程序),感受: (1)以后编写真正的软件程序,远远不是一个人可以完成的,要学会合作。 (2)和同伴的交流很重要,要学会交流,包括分工、对软件功能的理解,以后团队或者企业做软件,成员间的交流是很重要的。 4 通过这次考试,让我对java语言本身更有感觉了,包括语言基础、面相对象的感觉、真正地写软件的感觉。 5 java和C语言比较 对我来说最大的不同就是:java集成很高,通过短时间的学习就可以写出程序,掌握简单,易学。