java网络聊天室课程设计报告_第1页
java网络聊天室课程设计报告_第2页
java网络聊天室课程设计报告_第3页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计网络聊天室院係)别信电学院班 级计算102学号姓名指导教师 时 间 2013-4-18 2013-5-10课程设计任务书题 目网络聊天室课程设计系 (部) 信电学院专业计算机科学与技术班级计算102学生姓名学 号4月 18 日至 5 月 10 日共 4周指导教师(签字)系主任(签字)设计内容及要求、设计原始资料1) 电子工业出版社 JSP实用教程,郑阿奇编著2)电子工业出版社 JAVA程序设计实用教程,叶核亚编著三、设计完成后提交的文件和图表1 计算说明书部分JSP界面设计2 .图纸部分:程序流程图四、进程安排五、主要参考资料1)电子工业出版社 JSP实用教程,郑阿奇编著2) 电子工业

2、出版社 JAVA程序设计实用教程,叶核亚编著考资料成绩评定表作品成绩报告成绩口试(答辩)成绩总评成绩课程设计概述1.1问题描述1.2功能需求分析1.3环境需求分析学生信息管理系统软件总体设计 4.2.1整体思路42.2总体设计流程图 5.7.学生信息管理软件详细设计3.1.界面设计3.2通信功能实现方法9参考文献62摘要私達実践能力花高恥了込 学人疋知識花運用行。疋 更尤創造LT>学校怎特尤2週間手配LT>私達尤Visual C+課程設計実習 花行袒乜求r.0770 詳OS 説明怎 Visual C+6.0 環境下 >100V7bxT 過程花設計LT>OV7bxT 各種

3、O'一夕O個数花統計LOToOV7bxTO 機能二一廿'一怎1段O文字花入力LT、7卜少工 了怎文字O中O各類O尸一夕O数花記録LT、英文O尸一夕O数、数字O一夕 o数、空欄o尸一夕o数<no夕彳夕o数花含 明示l求r .以下、課程花通LT説明花設計LT、'一夕7卜少工70 説明花統計L T>y口厶怎 説明花調整LT、総括肚乂O方面花開発LT、詳L<oy口 厶O製作O過程花説明LT、作用、各種O実行操作.关键字:'一夕O統計,VC+6.0,课程设计概述1.1问题描述'随着计算机网络日新月异的发展,人们的交流方式越来越多,传统的交流方式,

4、 如:信件、电报、电话等已经难以满足人们的交流要求,在互联网上即时的和好友取得联系,已经成为当今社会人们主流的联系方式。因此,两台计算机之间进行即时通讯、发送文件等交流方式已经成为必然潮流。因此出现了 QQ等聊天工具,然而QQ等聊天工具虽然方便、实用,但是,娱乐功能太多,有很多吸引人的娱乐功 能,从一定程度上来说,是一种娱乐工具,不能作为用于即时通讯、文件共享的专 用工具。目前,用于实现单一的即时通讯、文件共享的软件实在太少,而且,它们 中大部分都是绝对的 C/S模式,对远程服务器有非常大的依赖性,没有彻底实现点对点的交流。为此,我决定开发一个专用于实现两台计算机之间即时通讯、文件共享的软件,

5、以方便两台计算机之间信息的交流。避免了服务器忙或与服务器无法连接时,浪费过多时间用于和服务器建立连接。因此,这个软件是极具适应性和实用性的即时通讯软件。1.2功能需求分析实现网络聊天的功能,采用Windows Socket (或Java Socket )编程,服务器与客 户端采用了 TCP/IP连接方式,在设计聊天方案时,可将所有信息发往服务器端,再 由服务器进行处理,服务器端是所有信息的中心。服务器端要保存用户信息,可利 用数据库来实现这一功能,需要建立用户信息数据库。在客户端可采用文件系统保 存聊天纪录和用户号码。可通过闪动托盘图标和播放不同的音乐提示信息到来及好 友上线等信息。可通过建立

6、消息链表来保存用户接收的各种消息。1.3环境需求分析运行环境:Windows 9x、2000、XP、Windows 7必要环境:JDK 1.6以上、eclipse开发环境硬件环境:CPU 400MHz 以上,内存512MB以上学生信息管理系统软件总体设计2.1整体思路该C/S模式的聊天系统,就是服务器来提供服务端连接响应,客户端主动的发起连接请求。当多个用户同时连接到服务器时 ,经由服务器的接收与转发便可以实现 客户之间的通信。对于整体系统的流程,也是分为两部分,即客户端的发起请求,服务器响应请 求。首先是客户端的登陆,客户端在登陆时,必须设置所想要连接的服务器,然后 客户端就会根据设置的服务

7、器IP地址,向服务器发起建立连接请求。而服务器端是始终在监听网络状态的,主要检测到有一个连接请求,那么服务器就会给当前的发 起端分配一个服务线程,用于处理它的各种请求。对于客户端的各种请求,实际上都是通过在客户发往服务器的各种字符流区分的,具体的方法就是在消息的头部以及尾部添加特殊字符串,从而实现服务器对消 息请求的识别。比如对于登陆信息,消息的头部就是PEOPLO”,而对于私聊中的消 息,头部就是SEC:其他的同理都添加了头部。当然,对于客户端来说,这些都是透 明的,用户的操作并没有受到任何影响 。在服务器端,消息被检测分析后,变回根 据具体的目的进行处理,比如是私聊消息,服务器便会根据其尾

8、部的目的信息 ,向 目标端转发该条消息。这里额外要说的是,该系统特别的对用户发来的消息进行了加密处理,即用户的各种具体信息,不仅能够防止向第三方的泄漏,而且即使服务器端出现异常,信息 也不会泄漏。对于私聊的方式,该系统所采用的方法类似于 QQ的通信方式,由发起方主动连 接,当目的方接收到连接请求后,会主动建立一个私聊窗口 ,从而 实现私聊。22总体设计流程图Clie nt接收请求后创建socket连接开始通信In putStreamIn putStream“ OutputstreamOutputstream学生信息管理软件详细设计3.1.界面设计由于这里界面设计源代码比较简单,这里不再列出服务

9、器界面设计服务器界面客户端界面设计登陆界面注册界面-駆天室闫户:测试用户Il-XJJI悔耐:所有人聊天內咨:聊天室界面3.2通信功能实现方法列举部分实现通信功能的主要代码AppServer.java 文件public class AppServer extends Thread private ServerSocket serverSocket ;private ServerFrame sFrame;private static Vector userOnline = new Vector(1, 1);private static Vector v = new Vector(1, 1);/*创

10、建服务器 启动服务监听1001端口*/ public AppServer() sFrame = new ServerFrame();try serverSocket = new ServerSocket(1001);/获取服务器的主机名和IP地址InetAddress address = InetAddress.getLocalHost ();sFrame .txtServerName .setText(address.getHostName();sFrame .txtIP .setText(address.getHostAddress();sFrame .txtPort .setText(&

11、quot;1001"); catch (lOException e) fail(e,"不能启动服务!");sFrame .txtStatus .setText("已启动.");this .start(); / 启动线程/*退出服务器* param e* 异常* param str* 退出信息*/public static void fail(Exception e, String str) System, out .println(str +"。" + e);*监听客户的请求,当有用户请求时创建Conn ection线程*/

12、public void run() try while (true ) /监听并接受客户的请求Socket client = serverSocket .accept();支持多线程new Connection( sFrame, client, userOnline , v);/ System.out.pr intln ("userLe ngth:"+userLe ngth); catch (IOException e) System, out .println("不能监听");/*启动服务器*/public static void main(Strin

13、g args) new AppServer();ServerFrame.java 文件Action Liste ner public class ServerFrame extends JFrame implementspublic JList list;*/private static final Io ng serialVersio nUID = -8936397327038098620L;/服务器信息面板JPanel pnlServer , pnlServerInfo ;JLabel IblStatus , IblNumber , lblMax , IblServerName , lbl

14、Protocol , lblIP, lblPort , lblLog ;public JTextField txtStatus , txtNumber , txtMax , txtServerName , txtProtocoltxtIP,txtPort ;JButton btnStop , btnSaveLog ;public TextArea taLog ;JTabbedPane tpServer ;public TextArea taMessage ;/用户信息面板JPanel pnlUser ;,IblUserCou ntpublic JLabel lblMessage , lblUs

15、er, lblNoticeJList lstUser;JScrollPane spUser;JTextField txtNotice ;JButton btnSend , btnKick ;public String ti =""public String serverMessage =""public ServerFrame() /服务器窗口super ("HappyChat聊天服务器");setSize(550, 500);setDefaultCloseOperatio n( JFrame.EXIT_ON_CLOSEsetResi

16、zable( false );Dimension scr = Toolkit. getDefaultToolkit ().getScreenSize();/ 在屏幕居中显示Dimension fra = this .getSize();if (fra. width > scr. width ) fra.width = scr. width ;if (fra. height > scr. height ) fra.height = scr. height;this .setLocation(scr. width - fra. width ) / 2,(scr.height - fra

17、. height ) / 2);II =服务器信息面板=pnlServer = new JPanel();pnlServer .setLayout( null );pnl Server Info=new JPanel( newGridLayout(14, 1);pnl Server Info .setBorder(BorderFactory. createCompo un dBorder (BorderFactory. createTitledBorder (""), BorderFactory.createEmptyBorder (1, 1, 1, 1);lblStatu

18、s = new JLabel("当前状态:");txtStatus = new JTextField(10);txtStatus .setEditable( false );IblNumber = new JLabel("当前在线人数:”);txtNumber = new JTextField( "0 人", 10);txtNumber .setEditable( false );lblMax = new JLabel("最多在线人数:");txtMax = new JTextField( "50 人",

19、 10);txtMax .setEditable( false );IblServerName = new JLabel("服务器名称:");txtServerName = new JTextField(10);txtServerName .setEditable( false );lblProtocol = new JLabel("访问协议:");txtProtocol = new JTextField( "HTTP", 10);txtProtocol .setEditable( false );IbllP = new JLabel

20、("服务器 IP:");txtIP = new JTextField(IO);txtIP .setEditable( false);IbIPort = new JLabel("服务器端口 :");txtPort = new JTextField( "8000" , 10);txtPort .setEditable( false );btnStop = new JButton("关闭服务器(C)");btnStop .addActionListener( new ActionListener() public voi

21、d acti on Performed(Act ion Eve nt arg0) closeServer(););lblLog = new JLabel("服务器日志");taLog = new TextArea(20, 50);btnSaveLog = new JButton("保存日志(S)");btnSaveLog .addActionListener( new ActionListener() public void acti on Performed(Act ion Eve nt argO) saveLog(););pnlServerInfo

22、.add( IblStatus );pnl Server Info .add(txtStatus );pnl Server Info .add( lblNumber );pnl Server Info .add(txtNumber );pnlServerInfo .add( lblMax );pnlServerInfo .add(txtMax );pnl Server Info .add( lblServerName );pnl Server Info .add( txtServerName );pnl Server Info .add( lblProtocol );pnl Server In

23、fo .add(txtProtocol );pnIServerlnfo .add(lbllP);pnIServerlnfo .add(txtlP);pnIServerlnfo .add( IbIPort );pnl Server Info .add( txtPort );pnIServerlnfo .setBounds(5, 5, 100, 400);IbILog .setBounds(110, 5, 100, 30);taLog .setBounds(110, 35, 400, 370);btnStop .setBounds(200, 410, 120, 30);btnSaveLog .se

24、tBounds(320, 410, 120, 30);pnlServer .add(pnlServerlnfo );pnlServer .add( IbILog );pnlServer .add( taLog );pnlServer .add(btnStop );pnlServer .add(btnSaveLog );II = 在线用户面板=pnl User = new JPa nel();pnlUser .setLayout( null );lblMessage=new JLabel("用户消息");taMessage=new TextArea(20, 20);lblNo

25、tice =new JLabel("通知:”);txtNotice =new JTextField(20);btnSend =new JButton("发送(S)");btnSend .setEnabled( true );btnSend .addActionListener( new ActionListener() public void acti on Performed(Act ion Eve nt argO) serverMessage(););lblUserCount = new JLabel("在线总人数 0 人");btnKic

26、k = new JButton("踢人(K)");btnKick .addActionListener( new ActionListener() public void acti on Performed(Act ion Eve nt argO) tiRe n(););IblUser = new JLabel("在线用户列表");lstUser = new JList();lstUser .setVisibleRowCount(17);lstUser.setFixedCellWidth(180); /指定的固定单元格宽度值,而不是从列表元素计算而来的宽

27、度值lstUser .setFixedCellHeight(18);spUser = new JScrollPane();spUser .setVerticalScrollBarPolicy(JScrollPa ne. VERTICAL_SCROLLBAR_ALWAYSspUser .getViewport().setView( lstUser);IbIMessage .setBounds(5, 5, 100, 25);taMessage .setBounds(5, 35, 300, 360);lblUser .setBounds(310, 5, 100, 25);spUser .setBou

28、nds(310, 35, 220, 360);lblNotice .setBounds(5, 410, 40, 25);txtNotice .setBounds(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

29、.add( spUser);list = new JList();list.setListData( new String "" );spUser .setViewportView( list);pnlUser .add( IblNotice );pnlUser .add(txtNotice );pnlUser .add( btnSend );pnlUser .add( IblUserCount );pnlUser .add(btnKick );/ =主标签面板=tpServer = new JTabbedPane(JTabbedPane. TOP);tpServer .a

30、dd("服务器管理", pnlServer);tpServer .add("用户信息管理", pnlUser);this .getContentPane().add( tpServer);setVisible( true );protected void serverMessage() / TODO自动生成方法存根this .serverMessage = txtNotice .getText();txtNotice .setText("");protected void closeServer() / TODO自动生成方法存根thi

31、s .dispose。;/this.resprotected void saveLog() / TODO自动生成方法存根try "log.txt"FileOutputStream fileoutput = new FileOutputStream(true );String temp = taMessage .getText();fileoutput.write(temp.getBytes();fileoutput.close();JOptionPane. showMessageDialog (null,”记录保存在 log.txt"); catch (Excep

32、tion e) System. out .println(e);protected void tiRen() / TODO自动生成方法存根ti = list .getSelectedValue().toString();log("Ti:"+ti);private void log(String string) / TODO自动生成方法存根String newta =taMessage .getText();newta += ( "n" +string);taMessage .setText(newta);public void action Perfor

33、med(Act ion Eve nt evt) public static void main(String args) new ServerFrame();Connection .java 文件public class Connection extends Thread 与客户端通讯Socket*/private Socket netClient ;/*在线用户列表*/private Vector<Customer>userOnline ;/*聊天信息*/private Vector<Chat> userChat ;/*从客户到服务器输入流*/private Obje

34、ctInputStream fromClient/*传到客户端打印流*/private Prin tStream toClie nt/*注册用户列表*/private static Vector vList =new Vector();/*临时对象*/private Object obj ;/*服务器日志窗体*/private ServerFrame sFrame;SuppressWarnings ("unchecked")/*创建与客户端通讯*/public Connection(ServerFrame frame, Socket client. Vector u. Ve

35、ctor c) n etClie nt = clie nt;userO nli ne = u;userChat = c;sFrame = frame;try /发生双向通信/检索客户输入 fromClient = new ObjectInputStream( netClient .getlnputStream();/服务器写到客户toClient = new PrintStream( netClient .getOutputStream(); catch (lOException e) try netClient .close(); catch (IOException e1) System.

36、 out.println("不能建立流"+ e1);return ;this .start();/*处理与客户端的通讯线程*/public void run() try / obj是Object类的对象obj = (Object) fromClient .readObject();if (obj .getClass().getName().equals( "Customer" ) /serverLogi n();serverLogi nDB();if (obj .getClass().getName().equals( "Register_Cu

37、stomer" ) /serverRegiste();serverRegisteDB();if (obj .getClass().getName().equals( "Message" ) serverMessage();if (obj .getClass().getName().equals( "Chat") serverChat();if (obj .getClass().getName().equals( serverExit(); catch (lOException e) System. out .println(e); catch

38、(ClassNotFoundException e1) System. out .println("读对象发生错误 fin ally try netClient .close(); catch (IOException e) System. out.println(e);"Exit") ! " + e1);/*登录处理*/SuppressWarnings ("deprecation")public void serverLogin() try Customer clientMessage2 = (Customer) obj;/读文件F

39、ileInputStream file3 = new FileInputStream( "user.txt");ObjectI nputStream objl nput1 = new ObjectI nputStream(file3);vList = (Vector) objl nput1.readObject();int find = 0;/查找判断标志/ System.out.pr intln(fin d);for (int i = 0; i <vList.size(); i+) Register_Customer reg = (Register_Customer

40、)vList.eleme ntAt(i);if (reg. custName .equals(clientMessage2. custName ) find = 1;if (!reg. custPassword .equals(clientMessage2. custPassword ) toClient .println("密码不正确");break ; else /判断是否已经登录int logi n_flag = 0;for (int a = 0; a < userOnline .size(); a+) / che nminStri ng _custName =

41、 (Customer)userO nli ne.elementAt(a). custName ;if (clientMessage2. custName .equals(_custName) logi n_flag = 1;break ; if (userOnline .size() >= 50) toClient .println("登录人数过多,请稍候再试");break ; if (logi n_flag = 0) clientMessage2. custHead = reg. head ;/getUserHeadByName(clie ntMessage2.c

42、ustName);userOnline .addElement(clientMessage2);toClient .println("登录成功");Date t = new Date();"登录成log("用户"+ clientMessage2. custName +功,"n");+ "登录时间:"+ t.toLocaleString() + freshServerUserList();break ; else toClient .println("该用户已登录"); else con

43、tinue ;if (find = 0) toClient .println("没有这个用户,请先注册");file3.close();objl nput1.close();fromClient .close(); catch (ClassNotFoundException e) System. out .println(e); catch (IOException e) System. out .println(e);*/登录处理throws Excepti onSuppressWarnings ("deprecation") public void

44、serverLoginDB() try Customer clientMessage2 = (Customer) obj;String n ame = clie ntMessage2.custNameString pass = clie ntMessage2.custPasswordStri ng sql = "select * from yon ghu where custName='" + n ame +ResultSet rs = DB. executeQuery (sql);System. out .println( "sql:" + s

45、ql);boolean login = false ;Stri ng head="" while (rs.next() String ps=rs.getString("custPassword" ).toString();System. out.println( "ps:"+ps+ "");System, out.println( "pass:"+pass+ "");if (ps.equals(pass.toStri ng() login = true ;System. out ,println( "logined:");System. out.println( "compareTo:" +pareTo(pass);head=rs.getString( "head");System. out.println( "head:" +rs.getString( "head");System. out .println( "login:&

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论