




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、' ' '编号:箴标林电孑科被人弯力夕GUILINUNIVERSITYOFELECTRONICTECHNOLOGY数学与计算科学学院创新性实验结题报告书实验题目:实验成绩(教师填写):学院:数学与计算科学学院专业:学生姓名:小组成员:指导教师:2011年04月15日' ' ' '' ' '一、实验目的及主要创新性点:目的:本次实验目的在于通过实践加深我们对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力。创新点:该实验
2、程序实现局域网内的聊天功能,通过服务器端的消息转发,不仅实现了多用户之间的群聊,还可以和单个用户之间的私聊,完整了一个简单的网络聊天软件的功能。包括服务器端程序和客户端程序两部分。客户端程序:可连接到服务器,并将消息发送到服务器端和接受服务器端发送来的信息。服务器端程序:可将消息发送到客户端和接受客户端发送来的信息二、实验要求:课程设计可选用NetBeans、Eclipse、JBuilder等作为开发平台以提高开发效率,尽可能熟练掌握其中一种集成开发环境。通过这次设计,要求掌握以下内容:1)面向对象技术中的继承与多态(重载和覆盖)机制、各种修饰符的使用2)类、包、接口的定义与使用3)常用工具类
3、与算法的实现(数组、向量、字符串、链表)4) Java常用标准GUI组件及其事件处理5) Java的异常处理机制6) Java的数据库连接技术7) Java的多线程技术与动画制作8) Java的网络编程三、实验原理:本程序设计为两个部分:服务器(ChatRoomServer)和客户端(ChatRoom)聊天的关键在于要将客户端发送过来的消息分发给其他客户端,为了解决这个问题,在服务器程序中建立一个套接口链表,用来保存所有与客户端建立了连接的服务端口。下面描述了聊天的实现原理:当客户端ClientN向对应的服务端口N发送了消息Message,服务端口N将Message复制给所有套接口列表(USE
4、RLIST)中的套接口缓冲区,然后向每个服务端口发送WRITE消息,使服务端口将Message发送给对应的客户端。这样,客户端就都获得了Message消息,实现了聊天功能。以下程序是多人聊功能的实现''''BOOLCClientSocketList:Sends(char*buff,intn)CClientSocket*curr=Head;while(curr)curr->Send(buff,n);curr=curr->Next;returntrue;USERLIST表时多人聊天程序的核心,它是一个动态变化的链表,为空表示没有客户端建立了连接,不为空时
5、每个元素就代表有一个客户端与服务器建立了连接。以下程序是私聊功能的实现:BOOLCClientSocketList:OnlySend(char*buff,intn,intwho)CClientSocket*curr=Head;while(curr&&who>0)curr=curr->Next;who-;curr->Send(buff,n);returntrue;四、实验内容与步骤:1 系统分析1.1 可行性分析经济可行性:由于本系统的主要背景是毕业课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台能
6、运行Java软件的电脑便可,所以不用考虑到经济问题。技术可行性:本系统的开发利用MicrosoftSQLServer2000作为本系统的数据库,它是一个支持多用户的新型数据库,适用于大中规模的数据量需求。学校校园网的建设也为新系统服务器/客户端的结构提供了硬件的支持。使用Java作为系统开发的开发环境,它提供完善的指令控制语句、类与对象的支持及丰富的数据类型,给开发高性能系统提供的保障为开发满足客户要求的系统,保证了代码的模块化要求,而代码模块化的提高,非常有利于以后对新系统的扩展与修改。运行可行性:本系统为一个小型的局域网聊天系统,所耗费的资源非常的小,现在一般的电脑无论是硬件还是软件都能够
7、满足条件,因此,本系统在运行上是可行的。综上所述,本系统的设计与开发在技术上和硬件设备上的条件都是满足的,因此,它在技术上是可行的。''''1.2 需求分析1.21 基本功能需求新用户注册:一般用户都想知道其他用户的一些基本资料,比如姓名、年龄、地址、IP地址等一些信息。查找以及添加好友:用户为了实现和其他人聊天,必须查找哪些人在线或者查找有哪些人使用该聊天工具.通过查找到的用户号码来实现添加其为好友。文字聊天:本聊天工具其实现的目的就是为了实现和用户间的沟通和交流,所以说文字聊天是必须具备的一项基本功能。用户个性化资料:用户申请的号码应该可以实现用户根据自己的
8、喜好选择自己喜欢的图象、自我介绍。查看聊天记录:用户在聊天的时候,难免会遇到把聊天窗口关掉,这样用户间的聊大信息也就看不到了,这样有可能导致用户不记得和其他用户聊的内容,导致这种结果对用户的聊天带来很大的不便,所以应该实现聊天信息的记录保存和查找。用户管理:用户有时候要修改和查看自己的用户资料,这样本系统应该实现用户资料的查询和修改这基本功能。1.22 环境需求支持WIN95/98/NT/2000/XP操作系统C200,32M内存以上可以正常运行其他无特殊要求1.23 性能需求尽量减少服务器的开销及数据传送负担,提高数据利用效率和数据传送效率,避免无效数据的传输。1.24 界面需求界面友好,聊
9、天对话框线程支持,实现无限制数量用户聊天。服务器端无特殊要求1.25 用户需求现在社会是信息化的社会,什么都追求着快、新、好。在这种快节奏的生活方式中,人们之间的通讯联系就显得非常的重要了。商业之间的合作,人们之间的友谊交往,甚至热门谈到的网上恋爱等等都需要通讯联系。而过去的鸿雁传书已经是满足不了现代人的欲望了。既然这网络这么的流行,过去的联系方式又这么的落后,因此人们的目光就转向了网络通讯。聊天工具就是一种网上很普遍但是又很重要的通讯方式。''''2,总体设计2.1功能模块图局域网聊天工具服务器端2.2系统业务流程图、' ' ''
10、; ' ' '3,系统模块详细设计3.1文本聊天模块流程图开始工展*况l+Jr1-IA.i-Jk.liE:?也=中口IFiL.-p-F二h-r-壬HC_*广!_>3.2文件传输模块流程图执行监听线程间接收就发送文件传他请孝支送把空信不按妆发送站的文件传入清家接欣端同茸捺股文向超排饮文将9启动计时器,发送文件漆,反序状态友遂同意接快信号,启动计时器,接u女文件泳,度微状态添加待恃送的文件捋远程文件存 储至本地文件随本地文件发送至接收她关闭计时器.关闭文件流关闭廿时毒,关闭文件造用户密码线止4,详细设计及实现4.1页面设计4.1.1登陆框界面设计欢迎所有本聊天工具一登
11、陆用户登陆用户注册4.1.2聊天界面的设计与1000054的聊天好友网名好友图像好友号码好友IP地址聊天的信息要发给对方的信息发送信息充填信息4.1.3主界面的设用1QQM象我的QQt码我的好友陌生人黑名单查找好友我的资料我的状态4.1 .4注册框的设计用户得注册用户名用户密码密码确认用户头像用户性别用户地址用户EMAIL确认提交重新填写4.2 数据输入输出设计4.3 .1数据输入4.2.11登陆界面数据的输入要求Number(账号)输入的必须是整型,它是一个用户登陆的账号。Password微码)可以是你设置好的字符串,字符串内容可以随便。如果用户设置不正确,将会导致登陆不成功,系统会弹出相应
12、的对话框。4.2.12注册界面的输入Nickname(昵称),password脩码),sign(个性签名)可以是任意的字符串。Email必须是Email地址格式,也就是中间必须含有”,否则提示输入不正确。4.3.12服务器端监听线程的设计服务器在监听到一个客户以后,它就会创建一个线程去管理这个客户。至于如何去管理这个客户,服务器端不做任何干涉,完全由监听线程决定。监听线程主要对客户端的请求进行响应,做到有求必应。接收到信息后,首先判断该信息是哪种类型,如果是要访问数据库服务器,则直接根据发送信息内容操作数据库。如果是聊天内容,服务器会将该信息再次转发到目的地。这些判断将会全放部在一个线程的ru
13、n方法中。4.3代码实现4.3.1 注册功能的部分代码如下:' ' 'trySocketsocket=newSocket("localhost",8000);BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream();PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream(),true);out.println("
14、login");out.println(PNTextField.getText().trim();out.println(PW.getPassword();Stringstr=""str=in.readLine().trim();/从服务器读取消息in.close();out.close();socket.close();/如果失败就告诉出错if(str.equals("false")JOptionPane.showMessageDialog(this,"对不起,出错了:-(","ok",JOptionP
15、ane.INFORMATION_MESSAGE);else/如果成功就打开主程序intqno=Integer.parseInt(PNTextField.getText().trim();this.dispose();MainFramemainframe=newMainFrame(qno,"localhost",8000);mainframe.setSize(600,250);DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();intscreenWidth=screenSize.width;intsc
16、reenHeight=screenSize.height;DimensionframeSize=mainframe.getSize();intx=screenWidth-frameSize.width;inty=0;mainframe.setLocation(x,y);mainframe.setResizable(true);mainframe.setVisible(true);catch(IOExceptionex)4.3.2 登陆功能的部分代码如下:trySocketsocket=newSocket("localhost",8000);BufferedReaderin=
17、newBufferedReader(newInputStreamReader(socket.getInputStream();PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream(),true);out.println("new");发送新建用户请求out.println(this.petname.getText().trim();out.println(this.password.getText().trim();out.println(th
18、.getText().trim();Stringsex=""if(male.isSelected()sex+="男";elsesex+="女";out.println(sex);System.out.println(sex);out.println(this.email.getText().trim();out.println(headpic.getSelectedIndex();intno;no=Integer.parseInt(in.readLine().toString().trim();System.out.pr
19、intln(no);Stringstr1=""str1=in.readLine().trim();/从服务器读取信息/如果出错if(str1.equals("false")JOptionPane.showMessageDialog(this,"对不起,出错了:-(","ok",JOptionPane.INFORMATION_MESSAGE);else如果成功就告诉用户其号码JOptionPane.showMessageDialog(this,"yourMnumis"+no,"ok&qu
20、ot;,JOptionPane.INFORMATION_MESSAGE);this.dispose();/并打开主窗口MainFramemainframe=newMainFrame(no,"localhost",8000);mainframe.setResizable(true);mainframe.setVisible(true);mainframe.show();out.close();in.close();socket.close();catch(IOExceptionex)System.err.println(ex);4.3.3查询好友功能的部分代码如下if(jCh
21、eckBox2.isSelected()FindResultfs=newFindResult();fs.setSize(400,200);DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();' ' ' ''''intscreenWidth=screenSize.width;intscreenHeight=screenSize.height;DimensionframeSize=fs.getSize();intx=(screenWidth-frameSize.wid
22、th)/2;inty=(screenHeight-frameSize.height)/2;fs.setLocation(x,y);fs.setResizable(false);fs.setVisible(true);this.dispose();else/用号码查找,并添加其为好友intwant_find_no=Integer.parseInt(this.jTextField1.getText().toString().trim();trySocketsocket=newSocket("localhost",8000);BufferedReaderin=newBuffere
23、dReader(newInputStreamReader(socket.getInputStream();PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream(),true);System.out.println("isOn");out.println("isOn");out.println(want_find_no);/对方在线就发送添加好友信息,对方确认后,系统添加/对发不在线就留言等待,等对方确认后,系统添加intis
24、On=Integer.parseInt(in.readLine().toString().trim();if(isOn=1)/在线Stringwant_find_IP=in.readLine().toString().trim();/添加好友,等待对方确认System.out.println(want_find_IP);AddFriendBoxadd=newAddFriendBox(want_find_no,my_no,want_find_IP);add.setSize(400,400);DimensionscreenSize=Toolkit.getDefaultToolkit().getSc
25、reenSize();intscreenWidth=screenSize.width;intscreenHeight=screenSize.height;DimensionframeSize=add.getSize();intx=(screenWidth-frameSize.width)/2;inty=(screenHeight-frameSize.height)/2;add.setLocation(x,y);add.setResizable(false);add.setVisible(true);else/不在线,留言' ' ' '' '
26、39;out.close();in.close();socket.close();catch(IOExceptione12)System.err.println(e12);this.dispose();5.3.4客户端的主要代码:importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;.*;importjava.io.*;publicclassNewextendsJFrame/登录窗口类JPanelcontentPane;11m*Stringserver;/服务器名intserport;/端口privateSocketsocket
27、;privateBufferedReaderin;/输入输出流privatePrintWriterout;程序界面当点击登陆按纽时代码的实现voidlogin_mouseClicked(MouseEvente)/登录按扭trySocketsocket=newSocket(InetAddress.getByName(server),serport);/连接服务器BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream();PrintWriterout=newPrintWriter(newBuffer
28、edWriter(newOutputStreamWriter(socket.getOutputStream(),true);out.println("login");/告诉服务器我要登录out.println(jicq.getText();out.println(password.getPassword();Stringstr=""/dostr=in.readLine().trim();/从服务器读取消息/如果失败就告诉出错if(str.equals("false")JOptionPane.showMessageDialog(this
29、,"对不起,出错了:-(","ok",JOptionPane.INFORMATION_MESSAGE);else/如果成功就打开主程序this.dispose();intg=Integer.parseInt(jicq.getText();MainWinf2=newMainWin(g,server,serport);f2.setVisible(true);''''' ' '/System.out.println("n");/while(!str.equals("ok");catch(IOExceptione1)voidnewuser_mouseClicked(MouseEvente)/新建用户按纽this.dispose();JDialogd=n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 秸秆发酵技术优化研究
- 分层教学下初中数学学科个性化学习路径的设计
- 专业人才短缺对中小博物馆文物征集的制约
- 数字化平台助力小学体育课后自主学习的路径
- 江西省上饶市广信区广信区第七中学2026届中考英语猜题卷含答案
- 2025版科技研发股份转让合同规范样本
- 二零二五年度绿色环保型加工厂承包合同
- 三乙胺改建项目申请报告(参考模板)
- 2025年度法院办理离婚案件财产分割与子女抚养协议合同
- 2025年度高科技企业劳务派遣合作协议
- 工程造价咨询服务方案(技术方案)
- 2024年全国预防接种技能竞赛【决赛】考试题库-上(单选题)
- 借款转为股权协议合同协议书
- 班主任技能大赛真题及答案
- CPK-能力分析模板(标准版)
- 建筑施工安全生产治本攻坚三年行动方案(2024-2026年)
- 万科物业服务工作手册
- 人教版小学英语单词表(完整版)
- (高清版)JTGT 3374-2020 公路瓦斯隧道设计与施工技术规范
- DL-T 1476-2023 电力安全工器具预防性试验规程
- 碳排放管理平台解决方案
评论
0/150
提交评论