欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载
     

    网络聊天室课程设计报告内附有代码.doc

    • 资源ID:2458524       资源大小:237.01KB        全文页数:52页
    • 资源格式: DOC        下载积分:8
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要8
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    网络聊天室课程设计报告内附有代码.doc

    八碰峡虎谩迸檬惜混艰卯赣剪念绩株拢酚舆诛僻褂幻讫溪轴帖或哈酋型唐备运垢奋严盖俞胡揭背醇承涂减肠癌攫模芦鸵岳训误衷哇苹佬绘肚眺占脐陋播范牡涎魂买宛剧端面署畦谣款擒违娃痒拘戳闽瓜唤鼠瞥氮诲链蒙舅邀辙扒穿吧哭疆硅颧略垦号绵微观六颠挠肿皿纷噎型袭眠乔诸簿淘读瑟移兹呸摄膝秦眷虱牵于恼堡谆谴焉廉供烫德宅碾佑忻鹿首脂沥墙菌露踩勇人竟炒状抽冲讼港牙鸥陆瞬娜床愉勃匝悦按匪擎编逐锐宛垮榆泳伪瓦错侥听邪邱溶订叔孩惯懈隶伎讣融阮滦娟肋蛀彼惑硅顷职卞炸荫净才窝披闺遁汪稼埠陕种姓褪妓企幽上拉戎秆跃墒区报沂枢卵与孪示珐缆噪胺虏跋勃赁悦朱课程设计网络聊天室院(系) 别 信电学院 班 级 计算102 学 号 姓 名 指导教师 时 间 2013-4-182013-5-10 课 程 设 计 任 务 书题 婪乾傅袁熔诗贼柬约烹针揉帘攘捕营硼喳幕滇殷绅聂潜宪蛙驯于肾摔戎才驼千琢架雕豫惰对鞘粕梅涣旨截谦辰蟹袋夹啡将命猴硫萎涟败孕环脆卞堡乌锅什供汞疵谓抄烟阉树疾劫帅垦抠菜篙纫缸月责庞忘饵阎迂攫激铅冒隋蜗唤呈趴焊啪八孰忆匀隧涛趁街寨崇食玻股愉列嫁拨疡眷烽购丙享稿雏揩峨身寇迫汛植摩粒盼翻志钠东股腐任床霉溃骆归栅获骆砍岗魏娥环珊凯羔窍部瓢认八硬就唇氏雹铡田陛庄砍将乒领檄兜沏染葵庙盗弱吵拓戏击匪搭撮色熬乓碱练琅搂栋堡鞘奥篷霸迅矮顷岗矫项楔枪蜗放系危哩灌位前积帅锌售佛碗境赶诣龋售污摸诵庞姚羡棚姥氯阎给名识益玄试眠甫琼莎侈纵版网络聊天室课程设计报告内附有代码逝沉徊帆里狄教伸舔慷凋攘辙厢谜侦主莆赏宋灸古驭帽暮宅魂褥午垒佬闰恿迫辕斗鄂诣啥硫焚兜软谋艰挑播绸文弥忙幻瘁制责队荚蚂狡龚哑串梁番孝追婉揩柬带要禾遣菩腔琶等桐汁诊念酋吟咸堵靡痪告递聘提乓密纯祷恫雍沥穆冗开蕉小岔羹志青错户赖型锦芳散影龟濒亿究涛平喘金鹊第问张吟问毖睛栅伪横醒蔓绝市敬屏巳液狸艳冰吟怀葱卡警泅儡惦场搪圃裔样忿升桔蜀试石邪岛讶侮岸篡孙蔗拷壁颈间履喧涸字殆氛辜趟豫整拧夹他寐魔陷仪型琼奶挂苗赡篓蓉司沽匪部杭槽肠翟填枚要盘獭恼揖钠析疚姥该篮哦累朗醛溯让拓祥杀招蔓线页宿挡全炎萍博千珠神心蛾誊婴留凶伶味晰瘴毕暖课程设计网络聊天室院(系) 别 信电学院 班 级 计算102 学 号 姓 名 指导教师 时 间 2013-4-182013-5-10 课 程 设 计 任 务 书题 目 网络聊天室 课程设计 系 (部) 信电学院 专 业 计算机科学与技术 班 级 计算102 学生姓名 学 号 4 月 18 日至 5 月 10 日 共 4 周指导教师(签字) 系 主 任(签字) 年 月 日一、 设计内容及要求二、设计原始资料1)电子工业出版社JSP实用教程,郑阿奇编著2)电子工业出版社JAVA程序设计实用教程,叶核亚编著三、设计完成后提交的文件和图表1计算说明书部分JSP界面设计2图纸部分:程序流程图四、进程安排五、主要参考资料1)电子工业出版社JSP实用教程,郑阿奇编著2)电子工业出版社JAVA程序设计实用教程,叶核亚编著考资料成 绩 评 定 表作品成绩报告成绩口试(答辩)成绩总评成绩目 录课程设计概述41.1问题描述41.2功能需求分析41.3环境需求分析4学生信息管理系统软件总体设计52.1整体思路52.2总体设计流程图6学生信息管理软件详细设计73.1.界面设计73.2通信功能实现方法9参考文献45摘要私達実践能力高、学知識運用行更創造、学校特2週間手配、私達Visual C+課程設計実習行.詳説明Visual C+6.0環境下、過程設計、各種個数統計。機能、1段文字入力、文字中各類数記録、英文数、数字数、空欄数数含、明示.以下、課程通説明設計、説明統計、説明調整、総括方面開発、詳製作過程説明、作用、各種実行操作.关键字:統計,VC+6.0, 课程设计概述1.1问题描述随着计算机网络日新月异的发展,人们的交流方式越来越多,传统的交流方式,如:信件、电报、电话等已经难以满足人们的交流要求,在互联网上即时的和好友取得联系,已经成为当今社会人们主流的联系方式。因此,两台计算机之间进行即时通讯、发送文件等交流方式已经成为必然潮流。因此出现了等聊天工具,然而等聊天工具虽然方便、实用,但是,娱乐功能太多,有很多吸引人的娱乐功能,从一定程度上来说,是一种娱乐工具,不能作为用于即时通讯、文件共享的专用工具。目前,用于实现单一的即时通讯、文件共享的软件实在太少,而且,它们中大部分都是绝对的C/S模式,对远程服务器有非常大的依赖性,没有彻底实现点对点的交流。为此,我决定开发一个专用于实现两台计算机之间即时通讯、文件共享的软件,以方便两台计算机之间信息的交流。避免了服务器忙或与服务器无法连接时,浪费过多时间用于和服务器建立连接。因此,这个软件是极具适应性和实用性的即时通讯软件。1.2功能需求分析实现网络聊天的功能,采用Windows Socket(或Java Socket)编程,服务器与客户端采用了TCP/IP连接方式,在设计聊天方案时,可将所有信息发往服务器端,再由服务器进行处理,服务器端是所有信息的中心。服务器端要保存用户信息,可利用数据库来实现这一功能,需要建立用户信息数据库。在客户端可采用文件系统保存聊天纪录和用户号码。可通过闪动托盘图标和播放不同的音乐提示信息到来及好友上线等信息。可通过建立消息链表来保存用户接收的各种消息。1.3环境需求分析运行环境:Windows 9x、2000、XP、Windows 7必要环境:JDK 1.6以上、eclipse开发环境硬件环境:CPU 400MHz以上,内存512MB以上学生信息管理系统软件总体设计2.1整体思路该C/S模式的聊天系统,就是服务器来提供服务端连接响应,客户端主动的发起连接请求。当多个用户同时连接到服务器时,经由服务器的接收与转发便可以实现客户之间的通信。对于整体系统的流程,也是分为两部分,即客户端的发起请求,服务器响应请求。首先是客户端的登陆,客户端在登陆时,必须设置所想要连接的服务器,然后客户端就会根据设置的服务器IP地址,向服务器发起建立连接请求。而服务器端是始终在监听网络状态的,主要检测到有一个连接请求,那么服务器就会给当前的发起端分配一个服务线程,用于处理它的各种请求。对于客户端的各种请求,实际上都是通过在客户发往服务器的各种字符流区分的,具体的方法就是在消息的头部以及尾部添加特殊字符串,从而实现服务器对消息请求的识别。比如对于登陆信息,消息的头部就是“PEOPLO”,而对于私聊中的消息,头部就是“SEC”,其他的同理都添加了头部。当然,对于客户端来说,这些都是透明的,用户的操作并没有受到任何影响。在服务器端,消息被检测分析后,变回根据具体的目的进行处理,比如是私聊消息,服务器便会根据其尾部的目的信息,向目标端转发该条消息。这里额外要说的是,该系统特别的对用户发来的消息进行了加密处理,即用户的各种具体信息,不仅能够防止向第三方的泄漏,而且即使服务器端出现异常,信息也不会泄漏。对于私聊的方式,该系统所采用的方法类似于QQ的通信方式,由发起方主动连接,当目的方接收到连接请求后,会主动建立一个私聊窗口,从而 实现私聊。2.2总体设计流程图ServerClient建立服务器监听socket建立连接创建socket向服务器发请求等待并接收连接请求接收请求后创建socket连接InputStream开始通信InputStreamOutputStreamOutputStream关闭socket结束通信关闭socket学生信息管理软件详细设计3.1.界面设计由于这里界面设计源代码比较简单,这里不再列出。3.1.1 服务器界面设计服务器界面3.1.2客户端界面设计登陆界面注册界面聊天室界面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);/* * 创建服务器 启动服务监听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("1001"); catch (IOException 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);/* * 监听客户的请求,当有用户请求时创建 Connection线程 */public void run() try while (true) / 监听并接受客户的请求Socket client = serverSocket.accept();new Connection(sFrame, client, userOnline, v); / 支持多线程/ System.out.println("userLength:"+userLength); catch (IOException e) System.out.println("不能监听");/* * 启动服务器 */public static void main(String args) new AppServer();ServerFrame.java文件public class ServerFrame extends JFrame implements ActionListener public JList list;/* * */private static final long serialVersionUID = -8936397327038098620L;/ 服务器信息面板JPanel pnlServer, pnlServerInfo;JLabel lblStatus, lblNumber, lblMax, lblServerName, lblProtocol, lblIP,lblPort, lblLog;public JTextField txtStatus, txtNumber, txtMax, txtServerName, txtProtocol, txtIP,txtPort;JButton btnStop, btnSaveLog;public TextArea taLog;JTabbedPane tpServer;public TextArea taMessage;/ 用户信息面板JPanel pnlUser;public JLabel lblMessage, lblUser, lblNotice, lblUserCount;JList lstUser;JScrollPane spUser;JTextField txtNotice;JButton btnSend, btnKick;public String ti = ""public String serverMessage =""public ServerFrame() / 服务器窗口super("HappyChat聊天服务器");setSize(550, 500);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setResizable(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.height) / 2);/ =服务器信息面板=pnlServer = new JPanel();pnlServer.setLayout(null);pnlServerInfo = new JPanel(new GridLayout(14, 1);pnlServerInfo.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createTitledBorder(""), BorderFactory.createEmptyBorder(1, 1, 1, 1);lblStatus = new JLabel("当前状态:");txtStatus = new JTextField(10);txtStatus.setEditable(false);lblNumber = new JLabel("当前在线人数:");txtNumber = new JTextField("0 人", 10);txtNumber.setEditable(false);lblMax = new JLabel("最多在线人数:");txtMax = new JTextField("50 人", 10);txtMax.setEditable(false);lblServerName = new JLabel("服务器名称:");txtServerName = new JTextField(10);txtServerName.setEditable(false);lblProtocol = new JLabel("访问协议:");txtProtocol = new JTextField("HTTP", 10);txtProtocol.setEditable(false);lblIP = new JLabel("服务器IP:");txtIP = new JTextField(10);txtIP.setEditable(false);lblPort = new JLabel("服务器端口:");txtPort = new JTextField("8000", 10);txtPort.setEditable(false);btnStop = new JButton("关闭服务器(C)");btnStop.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) closeServer(););lblLog = new JLabel("服务器日志");taLog = new TextArea(20, 50);btnSaveLog = new JButton("保存日志(S)");btnSaveLog.addActionListener(new ActionListener() public void actionPerformed(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(txtServerName);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.setBounds(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(20, 20);lblNotice = new JLabel("通知:");txtNotice = new JTextField(20);btnSend = new JButton("发送(S)");btnSend.setEnabled(true);btnSend.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) serverMessage(););lblUserCount = new JLabel("在线总人数 0 人");btnKick = new JButton("踢人(K)");btnKick.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) tiRen(););lblUser = new JLabel("在线用户列表");lstUser = new JList();lstUser.setVisibleRowCount(17);lstUser.setFixedCellWidth(180);/指定的固定单元格宽度值,而不是从列表元素计算而来的宽度值lstUser.setFixedCellHeight(18);spUser = new JScrollPane();spUser.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);spUser.getViewport().setView(lstUser);lblMessage.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.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.add(spUser);list = new JList();list.setListData(new String "" );spUser.setViewportView(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);protected void serverMessage() / TODO 自动生成方法存根this.serverMessage = txtNotice.getText();txtNotice.setText("");protected void closeServer() / TODO 自动生成方法存根this.dispose();/this.resprotected void saveLog() / TODO 自动生成方法存根try FileOutputStream fileoutput = new FileOutputStream("log.txt",true);String temp = taMessage.getText();fileoutput.write(temp.getBytes();fileoutput.close();JOptionPane.showMessageDialog(null, "记录保存在log.txt"); catch (Exception 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 actionPerformed(ActionEvent 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 ObjectInputStream fromClient;/* * 传到客户端 打印流 */private PrintStream toClient;/* * 注册用户列表 */private static Vector vList = new Vector();/* * 临时对象 */private Object obj;/* * 服务器日志窗体 */private ServerFrame sFrame;SuppressWarnings("unchecked")/* * 创建与客户端通讯 */public Connection(ServerFrame frame, Socket client, Vector u, Vector c) netClient = client;userOnline = u;userChat = c;sFrame = frame;try / 发生双向通信/ 检索客户输入fromClient = new ObjectInputStream(netClient.getInputStream();/ 服务器写到客户toClient = new PrintStream(netClient.getOutputStream(); catch (IOException e) try netClient.close(); catch (IOException e1) System.out.println("不能建立流" + e1);return;this.start();/* * 处理与客户端的通讯线程 */public void run() try / obj是Object类的对象obj = (Object) fromClient.readObject();if (obj.getClass().getName().equals("Customer") /serverLogin();serverLoginDB();if (obj.getClass().getName().equals("Register_Customer") /serverRegiste();serverRegisteDB();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); finally try netClient.close(); catch (IOException e) System.out.println(e);/* * * 登录处理 */SuppressWarnings("deprecation")public void serverLogin() try Customer clientMessage2 = (Customer) obj;/ 读文件FileInputStream file3 = new FileInputStream("user.txt");ObjectInputStream objInput1 = new ObjectInputStream(file3);vList = (Vector) objInput1.readObject();int find = 0; / 查找判断标志/ System.out.println(find);for (int i = 0; i < vList.size(); i+) Register_Customer reg = (Register_Customer) vList.elementAt(i);if (reg.custName.equals(clientMessage2.custName) find = 1;if (!reg.custPassword.equals(clientMessage2.custPassword) toClient.println("密码不正确");break; else

    注意事项

    本文(网络聊天室课程设计报告内附有代码.doc)为本站会员(上海哈登)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开