已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编号: 数学与计算科学学院创新性实验结题报告书实验题目: 实验成绩(教师填写): 学 院: 数学与计算科学学院 专 业: 学生姓名: 小组成员: 指导教师: 2011 年 04月 15日一、实验目的及主要创新性点:目的:本次实验目的在于通过实践加深我们对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力。创新点:该实验程序实现局域网内的聊天功能,通过服务器端的消息转发,不仅实现了多用户之间的群聊,还可以和单个用户之间的私聊,完整了一个简单的网络聊天软件的功能。包括服务器端程序和客户端程序两部分。客户端程序:可连接到服务器,并将消息发送到服务器端和接受服务器端发送来的信息。服务器端程序:可将消息发送到客户端和接受客户端发送来的信息二、实验要求:课程设计可选用NetBeans、Eclipse、JBuilder等作为开发平台以提高开发效率,尽可能熟练掌握其中一种集成开发环境。通过这次设计,要求掌握以下内容:1)面向对象技术中的继承与多态(重载和覆盖)机制、各种修饰符的使用2)类、包、接口的定义与使用3)常用工具类与算法的实现(数组、向量、字符串、链表)4)Java常用标准GUI组件及其事件处理5)Java的异常处理机制6)Java的数据库连接技术7)Java的多线程技术与动画制作8)Java的网络编程三、实验原理:本程序设计为两个部分:服务器 (ChatRoomServer)和客户端 (ChatRoom)聊天的关键在于要将客户端发送过来的消息分发给其他客户端,为了解决这个问题,在服务器程序中建立一个套接口链表,用来保存所有与客户端建立了连接的服务端口。下面描述了聊天的实现原理:当客户端Client N向对应的服务端口N发送了消息Message,服务端口N将Message复制给所有套接口列表(USERLIST)中的套接口缓冲区,然后向每个服务端口发送WRITE消息,使服务端口将Message发送给对应的客户端。这样,客户端就都获得了Message消息,实现了聊天功能。以下程序是多人聊功能的实现BOOL CClientSocketList:Sends(char *buff,int n)CClientSocket *curr=Head;while (curr)curr-Send(buff,n);curr=curr-Next;return true;USERLIST表时多人聊天程序的核心,它是一个动态变化的链表,为空表示没有客户端建立了连接,不为空时每个元素就代表有一个客户端与服务器建立了连接。以下程序是私聊功能的实现:BOOL CClientSocketList:OnlySend(char *buff,int n,int who)CClientSocket *curr=Head;while (curr & who0)curr=curr-Next;who-;curr-Send(buff,n);return true;四、实验内容与步骤:1 系统分析1.1 可行性分析经济可行性:由于本系统的主要背景是毕业课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台能运行Java软件的电脑便可,所以不用考虑到经济问题。技术可行性: 本系统的开发利用Microsoft SQL Server2000作为本系统的数据库,它是一个支持多用户的新型数据库,适用于大中规模的数据量需求。学校校园网的建设也为新系统服务器/客户端的结构提供了硬件的支持。使用Java作为系统开发的开发环境,它提供完善的指令控制语句、类与对象的支持及丰富的数据类型,给开发高性能系统提供的保障为开发满足客户要求的系统,保证了代码的模块化要求,而代码模块化的提高,非常有利于以后对新系统的扩展与修改。运行可行性: 本系统为一个小型的局域网聊天系统,所耗费的资源非常的小,现在一般的电脑无论是硬件还是软件都能够满足条件,因此,本系统在运行上是可行的。综上所述,本系统的设计与开发在技术上和硬件设备上的条件都是满足的,因此,它在技术上是可行的。1.2 需求分析 1.21基本功能需求新用户注册:一般用户都想知道其他用户的一些基本资料,比如姓名、年龄、地址、IP地址等一些信息。查找以及添加好友:用户为了实现和其他人聊天,必须查找哪些人在线或者查找有哪些人使用该聊天工具.通过查找到的用户号码来实现添加其为好友。文字聊天:本聊天工具其实现的目的就是为了实现和用户间的沟通和交流,所以说文字聊天是必须具备的一项基本功能。用户个性化资料:用户申请的号码应该可以实现用户根据自己的喜好选择自己喜欢的图象、自我介绍。查看聊天记录:用户在聊天的时候,难免会遇到把聊天窗口关掉,这样用户间的聊天信息也就看不到了,这样有可能导致用户不记得和其他用户聊的内容,导致这种结果对用户的聊天带来很大的不便,所以应该实现聊天信息的记录保存和查找。用户管理:用户有时候要修改和查看自己的用户资料,这样本系统应该实现用户资料的查询和修改这基本功能。1.22 环境需求支持WIN95/98/NT/2000/XP操作系统C200,32M内存以上可以正常运行其他无特殊要求1.23 性能需求尽量减少服务器的开销及数据传送负担,提高数据利用效率和数据传送效率,避免无效数据的传输。1.24界面需求界面友好,聊天对话框线程支持,实现无限制数量用户聊天。服务器端无特殊要求1.25 用户需求现在社会是信息化的社会,什么都追求着快、新、好。在这种快节奏的生活方式中,人们之间的通讯联系就显得非常的重要了。商业之间的合作,人们之间的友谊交往,甚至热门谈到的网上恋爱等等都需要通讯联系。而过去的鸿雁传书已经是满足不了现代人的欲望了。既然这网络这么的流行,过去的联系方式又这么的落后,因此人们的目光就转向了网络通讯。聊天工具就是一种网上很普遍但是又很重要的通讯方式。2, 总体设计2.1 功能模块图2.2 系统业务流程图 3, 系统模块详细设计3.1 文本聊天模块流程图 3.2 文件传输模块流程图4,详细设计及实现 4.1 页面设计 4.11登陆框界面设计欢迎所有本聊天工具登陆 用户登陆用户号码 用户注册用户密码 4.12 聊天界面的设计 与1000054的聊天 好友网名好友图像好友号码好友IP地址聊天的信息要发给对方的信息发送信息充填信息 4.13主界面的设计 QQ头像 我的QQ号码我的好友陌生人黑名单查找好友我的资料我的状态4.14注册框的设计用户得注册用户名用户密码密码确认用户头像用户性别用户地址用户EMAIL确认提交重新填写4.2 数据输入输出设计4.21数据输入4.211登陆界面数据的输入要求Number(账号)输入的必须是整型,它是一个用户登陆的账号。Password(密码)可以是你设置好的字符串,字符串内容可以随便。如果用户设置不正确,将会导致登陆不成功,系统会弹出相应的对话框。4.2.12注册界面的输入Nickname(昵称),password(密码),sign(个性签名)可以是任意的字符串。 Email必须是Email地址格式,也就是中间必须含有“”,否则提示输入不正确。4.3.12 服务器端监听线程的设计服务器在监听到一个客户以后,它就会创建一个线程去管理这个客户。至于如何去管理这个客户,服务器端不做任何干涉,完全由监听线程决定。监听线程主要对客户端的请求进行响应,做到有求必应。接收到信息后,首先判断该信息是哪种类型,如果是要访问数据库服务器,则直接根据发送信息内容操作数据库。如果是聊天内容,服务器会将该信息再次转发到目的地。这些判断将会全放部在一个线程的run方法中。4.3 代码实现4.3.1注册功能的部分代码如下: try Socket socket = new Socket(localhost, 8000); BufferedReader in = new BufferedReader(new InputStreamReader(socket. getInputStream(); PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), true); out.println(login); out.println(PNTextField.getText().trim(); out.println(PW.getPassword(); String str= ; str=in.readLine().trim();/从服务器读取消息 in.close(); out.close(); socket.close(); /如果失败就告诉出错 if(str.equals(false) JOptionPane.showMessageDialog(this,对不起,出错了:-(,ok,JOptionPane.INFORMATION_MESSAGE); else/如果成功就打开主程序 int qno = Integer.parseInt(PNTextField.getText().trim(); this.dispose(); MainFrame mainframe=new MainFrame(qno,localhost, 8000); mainframe.setSize(600,250); Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize(); int screenWidth=screenSize.width; int screenHeight=screenSize.height; Dimension frameSize=mainframe.getSize(); int x=screenWidth-frameSize.width; int y=0; mainframe.setLocation(x,y); mainframe.setResizable(true); mainframe.setVisible(true); catch (IOException ex)4.3.2登陆功能的部分代码如下: trySocket socket = new Socket(localhost, 8000); BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream(); PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),true); out.println(new);/发送新建用户请求 out.println(this.petname.getText().trim(); out.println(this.password.getText().trim(); out.println(.getText().trim(); String sex=; if (male.isSelected() sex+=男; else sex+=女; out.println(sex); System.out.println(sex); out.println(this.email.getText().trim(); out.println(headpic.getSelectedIndex(); int no; no = Integer.parseInt(in.readLine().toString().trim(); System.out.println(no); String str1=; str1=in.readLine().trim();/从服务器读取信息 /如果出错 if(str1.equals(false) JOptionPane.showMessageDialog(this,对不起,出错了:-(,ok,JOptionPane.INFORMATION_MESSAGE); else/如果成功就告诉用户其号码 JOptionPane.showMessageDialog(this, your M num is + no, ok, JOptionPane.INFORMATION_MESSAGE); this.dispose(); /并打开主窗口 MainFrame mainframe=new MainFrame(no,localhost, 8000); mainframe.setResizable(true); mainframe.setVisible(true); mainframe.show(); out.close(); in.close(); socket.close(); catch (IOException ex) System.err.println(ex); 4.33 查询好友功能的部分代码如下if (jCheckBox2.isSelected() FindResult fs = new FindResult(); fs.setSize(400, 200); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); int screenWidth = screenSize.width; int screenHeight = screenSize.height; Dimension frameSize = fs.getSize(); int x = (screenWidth - frameSize.width) / 2; int y = (screenHeight - frameSize.height) / 2; fs.setLocation(x, y); fs.setResizable(false); fs.setVisible(true); this.dispose(); else /用号码查找,并添加其为好友 int want_find_no = Integer.parseInt( this.jTextField1.getText().toString().trim() ); try Socket socket = new Socket(localhost, 8000); BufferedReader in = new BufferedReader(new InputStreamReader(socket. getInputStream(); PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), true); System.out.println(isOn); out.println(isOn); out.println(want_find_no); /对方在线就发送添加好友信息,对方确认后,系统添加 /对发不在线就留言等待,等对方确认后,系统添加 int isOn = Integer.parseInt(in.readLine().toString().trim(); if(isOn = 1) /在线 String want_find_IP =in.readLine().toString().trim(); /添加好友,等待对方确认 System.out.println(want_find_IP); AddFriendBox add = new AddFriendBox(want_find_no,my_no,want_find_IP); add.setSize(400,400); Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize(); int screenWidth=screenSize.width; int screenHeight=screenSize.height; Dimension frameSize=add.getSize(); int x=(screenWidth-frameSize.width)/2; int y=(screenHeight-frameSize.height)/2; add.setLocation(x,y); add.setResizable(false); add.setVisible(true); else /不在线,留言 out.close(); in.close(); socket.close(); catch(IOException e12) System.err.println(e12); this.dispose();5.3.4客户端的主要代码: import java.awt.*;import java.awt.event.*;import javax.swing.*;import .*;import java.io.*;public class New extends JFrame /登录窗口类 JPanel contentPane;/* String server;/服务器名 int serport;/端口 private Socket socket;private BufferedReader in;/输入输出流private PrintWriter out;程序界面 当点击登陆按纽时代码的实现 void login_mouseClicked(MouseEvent e) /登录按扭 trySocket socket=new Socket(InetAddress.getByName(server),serport);/连接服务器 BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream(); PrintWriter out=new PrintWriter(new BufferedWriter( new OutputStreamWriter(socket.getOutputStream(),true);out.println(login);/告诉服务器我要登录out.println(jicq.getText();out.println(password.getPassword(); String str= ; /do str=in.readLine().trim();/从服务器读取消息 /如果失败就告诉出错 if(str.equals(false) JOptionPane.showMessageDialog(this,对不起,出错了:-(,ok,JOptionPane.INFORMATION_MESSAGE); else/如果成功就打开主程序 this.dispose(); int g=Integer.parseInt(jicq.getText(); MainWin f2=new MainWin(g,server,serport); f2.setVisible(true)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 驱动精灵vip会员协议书
- 入股代持协议书
- 蔬菜进社区协议书
- 香港分居协议书
- 视频修复技术协议书
- 2025初级商业人像摄影师杂志人像高对比修图考核试卷
- STS传输协议书水表
- ospf的传输协议书
- tcpip协议书无属性
- 班组领料协议书钢材
- 网点负责人考试题库考点
- 2025年呼和浩特天骄航空有限公司招聘笔试冲刺题(带答案解析)
- 结直肠癌导致急性肠梗阻外科治疗中国专家共识(2025版)课件
- 辅助改方时方向继电器电路识读穆中华60课件
- 东方航空民航招飞面试常见问题及答案
- 危险性较大的分部分项工程清单
- 英语第二册(五年制高职) 课件 Unit5 Social Rules
- 银行物业年终工作总结
- 2025年三方询价单合同模板
- ISO14001-2015环境管理体系风险和机遇识别评价分析及应对措施表(包含气候变化)
- 如何正确书写化学方程式 教学设计
评论
0/150
提交评论