版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计网络聊天室院 (系) 别信电学院班级计算 102学号姓名指导教师时间2013-4-182013-5-10课程设计任务书题目网络聊天室课程设计系(部)信电学院专业计算机科学与技术班级计算 102学生姓名学号4月 18日至5月10日 共4 周指导教师 (签字 )系 主 任(签字)年月日一、 设计内容及要求二、设计原始资料1)电子工业出版社JSP实用教程,郑阿奇编著2)电子工业出版社JAVA程序设计实用教程,叶核亚编著三、设计完成后提交的文件和图表1计算说明书部分JSP界面设计2图纸部分:程序流程图四、进程安排五、主要参考资料1)电子工业出版社JSP实用教程,郑阿奇编著2)电子工业出版社JA
2、VA程序设计实用教程,叶核亚编著考资料成绩评定表作品成绩报告成绩口试(答辩)总评成绩成绩目 录课程设计概述21.1 问题描述21.2 功能需求分析21.3 环境需求分析2学生信息管理系统软件总体设计32.1 整体思路32.2 总体设计流程图4学生信息管理软件详细设计53.1.界面设计53.2 通信功能实现方法7参考文献错误!未定义书签。课程设计概述1.1 问题描述随着计算机网络日新月异的发展,人们的交流方式越来越多,传统的交流方式,如:信件、电报、电话等已经难以满足人们的交流要求,在互联网上即时的和好友取得联系,已经成为当今社会人们主流的联系方式。因此,两台计算机之间进行即时通讯、发送文件等交
3、流方式已经成为必然潮流。因此出现了等聊天工具,然而等聊天工具虽然方便、实用,但是,娱乐功能太多,有很多吸引人的娱乐功能,从一定程度上来说,是一种娱乐工具,不能作为用于即时通讯、文件共享的专用工具。目前,用于实现单一的即时通讯、文件共享的软件实在太少,而且,它们中大部分都是绝对的 C/S 模式,对远程服务器有非常大的依赖性,没有彻底实现点对点的交流。为此,我决定开发一个专用于实现两台计算机之间即时通讯、文件共享的软件,以方便两台计算机之间信息的交流。避免了服务器忙或与服务器无法连接时,浪费过多时间用于和服务器建立连接。因此,这个软件是极具适应性和实用性的即时通讯软件。1.2 功能需求分析实现网络
4、聊天的功能,采用 Windows Socket(或 Java Socket)编程,服务器与客户端采用了 TCP/IP连接方式, 在设计聊天方案时, 可将所有信息发往服务器端, 再由服务器进行处理,服务器端是所有信息的中心。服务器端要保存用户信息,可利用数据库来实现这一功能,需要建立用户信息数据库。在客户端可采用文件系统保存聊天纪录和用户号码。可通过闪动托盘图标和播放不同的音乐提示信息到来及好友上线等信息。可通过建立消息链表来保存用户接收的各种消息。1.3 环境需求分析运行环境: Windows 9x 、 2000、 XP、 Windows 7必要环境: JDK 1.6以上、 eclipse 开
5、发环境硬件环境: CPU 400MHz以上 ,内存 512MB 以上学生信息管理系统软件总体设计2.1 整体思路该 C/S 模式的聊天系统,就是服务器来提供服务端连接响应,客户端主动的发起连接请求。当多个用户同时连接到服务器时,经由服务器的接收与转发便可以实现客户之间的通信。对于整体系统的流程,也是分为两部分, 即客户端的发起请求,服务器响应请求。首先是客户端的登陆,客户端在登陆时,必须设置所想要连接的服务器,然后客户端就会根据设置的服务器 IP 地址,向服务器发起建立连接请求。 而服务器端是始终在监听网络状态的,主要检测到有一个连接请求,那么服务器就会给当前的发起端分配一个服务线程,用于处理
6、它的各种请求。对于客户端的各种请求, 实际上都是通过在客户发往服务器的各种字符流区分的,具体的方法就是在消息的头部以及尾部添加特殊字符串,从而实现服务器对消息请求的识别。比如对于登陆信息,消息的头部就是“ PEOPLO” ,而对于私聊中的消息,头部就是“ SEC”,其他的同理都添加了头部。当然,对于客户端来说,这些都是透明的,用户的操作并没有受到任何影响。在服务器端,消息被检测分析后,变回根据具体的目的进行处理,比如是私聊消息,服务器便会根据其尾部的目的信息,向目标端转发该条消息。这里额外要说的是,该系统特别的对用户发来的消息进行了加密处理,即用户的各种具体信息,不仅能够防止向第三方的泄漏,而
7、且即使服务器端出现异常,信息也不会泄漏。对于私聊的方式,该系统所采用的方法类似于QQ 的通信方式,由发起方主动连接,当目的方接收到连接请求后,会主动建立一个私聊窗口,从而实现私聊。2.2 总体设计流程图ServerClient建立服务器建立连接等待并接收创建 socket接收请求后创建socket 连接开始通信InputStreamInputStreamOutputStreamOutputStream关闭 socket结束通信关闭 socket学生信息管理软件详细设计3.1. 界面设计由于这里界面设计源代码比较简单,这里不再列出。3.1.1 服务器界面设计服务器界面3.1.2 客户端界面设计登
8、陆界面注册界面聊天室界面3.2 通信功能实现方法列举部分实现通信功能的主要代码AppServer.java 文件publicclassAppServerextendsThread privateServerSocketserverSocket;privateServerFramesFrame ;privatestaticVectoruserOnline=new Vector(1, 1);privatestaticVectorv =new Vector(1, 1);/* 创建服务器 启动服务监听 1001 端口*/publicAppServer() sFrame =new ServerFrame
9、();tryserverSocket=new ServerSocket(1001);/ 获取服务器的主机名和 IP 地址InetAddress address = InetAddress. getLocalHost sFrame . txtServerName .setText(address.getHostName(); sFrame . txtIP .setText(address.getHostAddress(); sFrame . txtPort .setText( 1001 ); catch (IOException e) ();fail(e, 不能启动服务! );sFrame .
10、txtStatus.setText( 已启动 .);this.start();/启动线程/* 退出服务器* param e*异常* param str*退出信息*/publicstaticvoidfail(Exception e, String str) System. out .println(str +。 + e);/*监听客户的请求,当有用户请求时创建Connection线程*/publicvoidrun() trywhile( true ) / 监听并接受客户的请求Socket client =serverSocket.accept();new Connection(sFrame ,
11、client,userOnline,v);/支持多线程/ System.out.println(userLength:+userLength);catch(IOException e) System. out .println( 不能监听 );/* 启动服务器*/publicstaticvoidmain(String args) new AppServer();ServerFrame.java文件publicclassServerFrameextendsJFrameimplementsActionListener publicJListlist;/*/privatestaticfinallon
12、gserialVersionUID=-8936397327038098620L;/ 服务器信息面板JPanelpnlServer,pnlServerInfo;JLabellblStatus,lblNumber,lblMax ,lblServerName,lblProtocol,lblIP,lblPort,lblLog;publicJTextFieldtxtStatus,txtNumber,txtMax ,txtServerName,txtProtocol,txtIP,txtPort;JButtonbtnStop ,btnSaveLog ;publicTextAreataLog ;JTabbed
13、PanetpServer;publicTextAreataMessage ;/ 用户信息面板JPanelpnlUser;publicJLabellblMessage,lblUser,lblNotice,lblUserCount;JListlstUser;JScrollPanespUser ;JTextFieldtxtNotice;JButtonbtnSend ,btnKick;publicStringti= ;publicStringserverMessage= ;publicServerFrame() / 服务器窗口Toolkit.super ( HappyChat聊天服务器 );setSi
14、ze(550, 500);setDefaultCloseOperation(JFrame.setResizable(false);Dimension scr =getDefaultToolkit().getScreenSize();Dimension fra =this.getSize();if(fra.width scr.width ) fra.width= scr.width ;EXIT_ON_CLOSE);/在屏幕居中显示if(fra.height scr.height) fra.height= scr.height;this.setLocation(scr. (scr. height-
15、 fra.width- fra.width ) / 2,height) / 2);/ =服务器信息面板 =pnlServer=new JPanel();pnlServer.setLayout(null);pnlServerInfo=new JPanel(new GridLayout(14, 1);pnlServerInfo.setBorder(BorderFactory.createCompoundBorderBorderFactory.createTitledBorder( ), BorderFactory. createEmptyBorder(1, 1, 1, 1);(lblStatust
16、xtStatustxtStatus=new JLabel( 当前状态 : );=new JTextField(10);.setEditable(false);lblNumber=new JLabel( 当前在线人数: );txtNumber = new JTextField( txtNumber .setEditable( false0);人 , 10);lblMax=new JLabel( 最多在线人数: );txtMax = new JTextField( txtMax .setEditable( false50);人 , 10);lblServerNametxtServerNametxt
17、ServerName=new JLabel( 服务器名称 : );=new JTextField(10);.setEditable(false);lblProtocoltxtProtocoltxtProtocol=new JLabel( 访问协议 : );=new JTextField(HTTP , 10);.setEditable(false);lblIP=new JLabel( 服务器 IP:);txtIP=new JTextField(10);txtIP.setEditable(false);lblPort=new JLabel( 服务器端口 : );txtPort=new JTextF
18、ield(8000 , 10);txtPort.setEditable(false);btnStop=new JButton( 关闭服务器 (C) );btnStop.addActionListener(new ActionListener() publicvoidactionPerformed(ActionEvent arg0) closeServer(););lblLog=new JLabel( 服务器日志 );taLog=new TextArea(20, 50);btnSaveLog=new JButton( 保存日志 (S) );btnSaveLog .addActionListene
19、r(new ActionListener() publicvoidactionPerformed(ActionEvent arg0) saveLog(););pnlServerInfo.add(lblStatus);pnlServerInfo.add(txtStatus);pnlServerInfo.add(lblNumber);pnlServerInfo.add(txtNumber);pnlServerInfo.add(lblMax);pnlServerInfo.add(txtMax);pnlServerInfo.add(lblServerName);pnlServerInfo.add(tx
20、tServerName);pnlServerInfo.add(lblProtocol);pnlServerInfo.add(txtProtocol);pnlServerInfo.add(lblIP);pnlServerInfo.add(txtIP);pnlServerInfo.add(lblPort);pnlServerInfo.add(txtPort);pnlServerInfo.setBounds(5, 5, 100, 400);lblLog.setBounds(110, 5, 100, 30);taLog .setBounds(110, 35, 400, 370);btnStop.set
21、Bounds(200, 410, 120, 30);btnSaveLog.setBounds(320, 410, 120, 30);pnlServer.add(pnlServerInfo);pnlServer.add(lblLog);pnlServer.add(taLog );pnlServer.add(btnStop);pnlServer.add(btnSaveLog);/ = 在线用户面板 =pnlUser = new JPanel();pnlUser.setLayout(null);lblMessage=new JLabel( 用户消息 );taMessage=new TextArea(
22、20, 20);lblNotice=new JLabel(通知:);txtNotice=new JTextField(20);btnSend=new JButton( 发送 (S) );btnSend.setEnabled(true);btnSend.addActionListener(new ActionListener() publicvoid actionPerformed(ActionEvent arg0) serverMessage(););lblUserCount=new JLabel( 在线总人数0人 );btnKick=new JButton( 踢人 (K);btnKick.a
23、ddActionListener(new ActionListener() publicvoidactionPerformed(ActionEvent arg0) tiRen(););lblUser=new JLabel( 在线用户列表 );lstUser=new JList();lstUser.setVisibleRowCount(17);lstUser.setFixedCellWidth(180);/ 指定的固定单元格宽度值,而不是从列表元素计算而来的宽度值lstUser.setFixedCellHeight(18);spUser =new JScrollPane();spUser .se
24、tVerticalScrollBarPolicy(JScrollPane.R_ALWAYS);spUser .getViewport().setView(lstUser);VERTICAL_SCROLLBAlblMessage.setBounds(5, 5, 100, 25);taMessage .setBounds(5, 35, 300, 360);lblUser.setBounds(310, 5, 100, 25);spUser .setBounds(310, 35, 220, 360);lblNotice.setBounds(5, 410, 40, 25);txtNotice.setBo
25、unds(50, 410, 160, 25);btnSend .setBounds(210, 410, 80, 25);lblUserCount.setBounds(320, 410, 100, 25);btnKick.setBounds(440, 410, 80, 25);pnlUser.add( lblMessage);pnlUser.add( taMessage );pnlUser.add( lblUser);pnlUser.add( spUser );list=new JList();list.setListData(new String );spUser .setViewportVi
26、ew(list);pnlUser.add(lblNotice);pnlUser.add(txtNotice);pnlUser.add(btnSend );pnlUser.add(lblUserCount );pnlUser.add(btnKick );/ =主标签面板 =tpServer= new JTabbedPane(JTabbedPane.TOP);tpServer.add( 服务器管理 ,pnlServer);tpServer.add( 用户信息管理 , pnlUser );this .getContentPane().add(tpServer);setVisible(true );p
27、rotectedvoidserverMessage() / TODO自动生成方法存根this. serverMessage=txtNotice.getText();txtNotice.setText( );protectedvoidcloseServer() / TODO自动生成方法存根this.dispose();/this.resprotectedvoidsaveLog() / TODO自动生成方法存根tryFileOutputStream fileoutput =newFileOutputStream(log.txt,true );String temp =taMessage .getT
28、ext();fileoutput.write(temp.getBytes();fileoutput.close();JOptionPane.showMessageDialog( null, 记录保存在log.txt);catch(Exception e) System. out .println(e);protectedvoidtiRen() / TODO自动生成方法存根ti=list.getSelectedValue().toString();log(Ti:+ti );privatevoidlog(String string) / TODO自动生成方法存根String newta =taMe
29、ssage .getText();newta += (n+string);taMessage .setText(newta);publicvoidactionPerformed(ActionEvent evt) publicstaticvoidmain(String args) new ServerFrame();Connection.java文件publicclassConnectionextendsThread /* 与客户端通讯 Socket*/privateSocketnetClient;/* 在线用户列表*/privateVectoruserOnline;/* 聊天信息*/priva
30、teVectoruserChat;/* 从客户到服务器 输入流*/privateObjectInputStreamfromClient;/* 传到客户端 打印流*/privatePrintStreamtoClient;/* 注册用户列表*/privatestaticVectorvList=new Vector();/* 临时对象*/privateObjectobj ;/* 服务器日志窗体*/privateServerFramesFrame ;SuppressWarnings( unchecked)/* 创建与客户端通讯*/publicConnection(ServerFrame frame,
31、Socket client, Vector u,Vector c) netClient= client;userOnline= u;userChat= c;sFrame = frame;try/ 发生双向通信/ 检索客户输入fromClient=newObjectInputStream(netClient.getInputStream();/ 服务器写到客户toClient=new PrintStream(catch(IOException e) trynetClient.close();catch(IOException e1) netClient.getOutputStream();Sys
32、tem. out .println( 不能建立流 + e1);return;this.start();/* 处理与客户端的通讯线程*/publicvoidrun() /try / obj是 Object 类的对象obj = (Object)fromClient.readObject();if( obj .getClass().getName().equals(serverLogin();serverLoginDB();Customer) if( obj .getClass().getName().equals(Register_Customer)/serverRegiste();serverR
33、egisteDB();if( obj .getClass().getName().equals(Message ) serverMessage();if( obj .getClass().getName().equals(Chat) serverChat();if( obj .getClass().getName().equals(Exit) serverExit();catch(IOException e) System. out .println(e);catch(ClassNotFoundException e1) System. out .println( 读对象发生错误! + e1)
34、;finallytrynetClient.close();catch(IOException e) System. out .println(e);/*登录处理*/SuppressWarnings( deprecationpublicvoidserverLogin() )tryCustomer clientMessage2 = (Customer)obj ;/读文件FileInputStream file3 =new FileInputStream(user.txt);ObjectInputStream objInput1 =newObjectInputStream(file3);vList=
35、 (Vector) objInput1.readObject();intfind = 0;/查找判断标志/ System.out.println(find);for( inti = 0; i vList.size(); i+) Register_Customer reg = (Register_Customer)vList.elementAt(i);if(reg.custName .equals(clientMessage2.find = 1;ifcustName ) (!reg.custPassword.equals(clientMessage2.custPassword) toClient.println( 密码不正确 );break ; else / 判断是否已经登录intlogin_flag = 0;for( inta = 0; a = 50) toClient.println( 登录人数过多,请稍候再试 );break ;if(login_flag = 0) clientMessage2.custHead= reg.head ; /getUserHeadByName(clientMessage2.custName);userOnline.ad
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年物业服务企业培训与发展补充协议合同范本3篇
- 二零二五年度医疗机构双向转诊责任追究合同
- 二零二五年度科技研发合同审查标准与成果转化合作协议
- 2025年度多类别商标全球授权合作协议
- 2024物业管理公司社区活动兼职劳务合同范本3篇
- 二零二五年度洗车店与汽车租赁公司合作协议
- 2025年度参股协议书:新能源车充电桩投资参股协议范文
- 2025年度年度商铺租赁权及经营权混合转让合同
- 2025年度双方离婚协议书范本及财产分割与共同债务协议
- 2025年度年度带物业管理服务的商品房按揭房买卖合同
- 施工现场临时建筑验收表
- 皓月集团市场营销策略研究
- 二次砌筑配管(JDG)技术交底
- 施工升降机定期检验原始记录
- AI技术打造智能客服机器人
- 文化差异与跨文化交际课件(完整版)
- 国货彩瞳美妆化消费趋势洞察报告
- 云南省就业创业失业登记申请表
- 油气储存企业安全风险评估指南(试行)
- UL_标准(1026)家用电器中文版本
- 快速了解陌生行业的方法论及示例PPT课件
评论
0/150
提交评论