




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
哈尔滨工业大学(威海)计算机学院JAVA网络编程课程设计验收及成绩评定表(项目组)项目名称局域网内的多功能聊天室职责学 号姓 名主 要 分 工用户登录,用户列表,文本聊天,整合文件传输,整合设计开始日期项目完成日期文 档 评 审 成 绩 (共50分)评审项目评审内容成绩标准评审成绩项目名称课题是否从实际出发,是否具有创意等10文档格式文档格式是否规范;文字是否规范;图表是否规范;术语是否准确等20分文档质量程序设计思想与整体框架是否清晰等20分文档总体评价总成绩程 序 功 能 完 备 性 评 审 成 绩 (共 50 分)评审项目评 审 内 容成绩标准评审成绩程序运行状况程序是否能正常运行;是否出现死锁;是否遇到错误而中止运行10分程序正确性对于给定的输入数据,是否能得到正确的输出结果15分程序与文档的一致性程序与各种文档的内容是否一致5 分程序的代码量程序代码量的大小10分实现方法图形界面或命令行界面,美观程度5分实现语言面向过程或面向对象5分程序总体评价总成绩姓 名: 学 号: 院(系): 计算机科学与技术学院专 业:信息安全 任务起止日期: 课程设计题目:局域网内的多功能聊天室 问题阐述与分析: 网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。网络聊天是网络编程的典型应用之一,编写网络聊天软件对于学习网络编程无疑有着很大的帮助。本软件旨在为同一局域网用户间提供便利的局域网服务,局域网用户可以通过此聊天软件在各终端相互发送聊天信息,同时可以快速传送文件,方便局域网用户间的快速有效通信。 工作量:1. 程序总体整体框架界面设计2. 用户登录模块设计3. 用户列表模块设计4. 文本聊天模块设计5. 文件传输模块设计6. 客户端及服务器端程序的整合 工作计划安排:查阅资料、需求分析、设计程序整体框架功能及界面:程序代码编写:程序整合、撰写报告 同组设计者及分工:文件传输模块整合工作共同完成。目录1. 序言11.1 背景11.2 相关技术11.2.1 JAVA概述11.2.2 套接字11.2.3 TCP三次握手22. 程序设计与实现22.1 需求分析22.2 程序结构32.2.1 多用户在线方案32.2.2 软件框架32.3 代码实现32.3.1 用户登录模块32.3.2 用户列表模块52.3.3 文本聊天模块72.3.4 文件传输模块103. 测试结果103.1 测试环境与使用方法103.2 功能测试103.2.1 用户登录及用户列表103.2.2 文本聊天 群聊 私聊 字体设置133.2.3 文件传输144. 总结15参考文献161. 序言1.1 背景在网络越来越发达的今天,人们对网络的依赖越来越多,各种网络应用层出不穷,网络编程越来越受大广大程序员的重视。网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。网络聊天是网络编程的典型应用之一,编写网络聊天软件对于学习网络编程无疑有着很大的帮助。本小组编写本软件,旨在通过软件的编写与实现,来提高对网络编程的理解和掌握。1.2 相关技术1.2.1 JAVA概述 JAVA语言有下面一些特点:简单、面向对象、分布式、解释执行、鲁棒、 安全、体系结构中立、可移植、高性能、多线程以及动态性。丰富的类库JAVA提供了大量的类以满足网络化、多线程、面向对象系统的需要。语言包提供的支持包括字符串处理、多线程处理、数学函数处理等,可以用它简单地实现JAVA程序的运行平台。实用程序包提供的支持包括哈希表、堆栈、可变数组、时间和日期等。输入输出包用统一的流模型来实现所有格式的I/O,包括文件系统、网络、输入低级网络包用于实现Socket编程。抽象图形用户接口包实现了不同平台的计算机的图形用户接口部件, 包括窗口、菜单、滚动条、对话框等,使得JAVA可以移植到不同平台的机器。网络包支持Internet的TCP/IP协议,提供了与Internet的接口。它支持URL连接,WWW的即时访问,并且简化了用户/服务器模型的程序设计。JAVA和C、C+对于变量声明、参数传递、操作符、流控制等使用了相同的传统,使得熟悉C、C+的程序员能很方便地进行编程。同时, JAVA为了实现其简单、鲁棒、安全等特性,也摒弃了C和C+中许多不合理的内容。1.2.2 套接字Socket,简称套接字,用于实现网络上客户和服务器之间的连接。也就是说网络上两个或两个以上双工方式通信的进程之间总有一个连接,这个连接的端点成为套接字,套接字是在比较低的层次上通信的。具体的说:一个服务器应用程序一般侦听一个特定的端口等待客户端的连接请求,当一个连接请求到达时,客户端和服武器端建立一个通信连接,在连接过程中,客户端被分配一个本地端口与一个Socket建立连接,客户端通过写Socket来通知服务器,以读Socket中的信息,类似的服务器也获得一个本地端口,它需要一个新的端口号来侦听原始端口上的其他连接请求。服务器也通过它的本地端口连接一个Socket,通过读写和客户端通信。Socket程序的工作过程:1.建立Socket连接:在通信开始之前由通信双方确认身份,建立一条专用的虚拟连接道。2.数据通信:利用虚拟连接通道传送数据信息进行通信。3.关闭:通信结束时,再将所建的虚拟连接拆除。1.2.3 TCP三次握手第一次握手:原主机发送一个带有本次连接的序号的请求的一个数据帧第二次握手:目的主机收到请求后,如果同意连接,则发回一个带有一个本次连接序号和源端机连接序列号的确认。第三此握手:源端机收到含有两次初始序列号的应答后,再向目的主机发送一个带有两次连接的序列号的确认。具体过程如下:2. 程序设计与实现2.1 需求分析做为一个局域网内的即时聊天程序,除了基本的聊天功能,文件传输也是经常用到的功能。本软件需具有以下几个功能:1. 用户登录设立一个服务器,实现多用户即时通讯;用户在登录的同时需输入一些个性化的信息,以便于各用户之前的识别。2. 文本聊天聊天室功能,即所谓的群聊,聊天内容所有人可见;保密聊天功能,即所谓的私聊,聊天内容仅聊天双方可见;用户可对字体进行设置。3. 文件转输多线程,收发可同时进行。2.2 程序结构2.2.1 多用户在线方案采用客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。2.2.2 软件框架TCP SocketClientPublic TalkingServerPrivate TalkingFiles TransUser ListConnect/logonUsers2.3 代码实现开发环境:Windows XP Professional SP3 + JDK 1.6.0_18 + NetBeans IDE 用户登录模块只列出程序界面以及与服务器端通讯部分的代码:客户端: class Connect extends JFrame implements ActionListener, ItemListener, KeyListenerpublic void link() throws Exception / 连接服务器hostName = hostText.getText().trim();port = Integer.parseInt(portText.getText();client = new Socket(hostName, port);/ 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。in = new BufferedReader(new InputStreamReader(client.getInputStream();out = new PrintWriter(client.getOutputStream();out.println(nameText.getText() + & + sex);out.flush();服务器端:public static void addConnection(Socket s, ClientProc cp)if (connections = null)connections = new Vector();connections.addElement(s);if (clients = null)clients = new Vector();clients.addElement(cp);public static void deleteConnection(Socket s, ClientProc cp)throws IOExceptionif (connections != null)connections.removeElement(s);s.close();if (clients != null)clients.removeElement(cp);public static Vector getClients()return clients;2.3.2 用户列表模块只列出程序界面以及与服务器端通讯部分的代码:客户端:public void valueChanged(ListSelectionEvent e)/ 监听下拉列表的显示内容if (e.getSource() = peopleList)tryString select = (String) peopleList.getSelectedValue();if (select != null) / 确保选择非空String userInfo = select.split();String name = userInfo0.trim(); / 提取名字if (!name.equals(chf.myName) / 不能添加自己int count = chf.perponsComboBox.getItemCount();for (int i = 0; i count; i+)chf.perponsComboBox.setSelectedIndex(i);/ 选择第i项String strName = (String) chf.perponsComboBox.getSelectedItem();if (name.equals(strName) / 如果已经在列表中,就复合框中选中,所以要确保没有重名return;/ 如果没有添加,就会执行下面语句 添加chf.perponsComboBox.addItem(name); catch (Exception ee)System.out.println(发生错误 在valueChanged + ee);public void actionPerformed(ActionEvent e)if (e.getSource() = refurbishButton) / 如果监听到要刷新列表trylistModel.clear(); / 清空列表chf.out.println(refurbish); / 发送刷新请求到服务器chf.out.flush(); catch (Exception ee)服务器端:public String getName()return name;public String getSex()return sex;public Socket getSocket()return s;private void updateList()/ 更新用户列表(即发送当前在聊天室的用户到新来的用户列表中)Vector cs = ChatServer.getClients();if (cs != null)for (Enumeration e = cs.elements(); e.hasMoreElements();)ClientProc cp = (ClientProc) e.nextElement();String exist_name = cp.getName();String exit_sex = cp.getSex();/* * for (int i = 0;ics.size() ;i+ ) String exist_name * =(ClientProc)cs.elementAt(i).getName(); String exit_sex = * (ClientProc)cs.elementAt(i).getSex(); */System.out.println(old + & + exist_name + & + exit_sex);out.println(old + & + exist_name + & + exit_sex);out.flush();2.3.3 文本聊天模块只列出程序界面以及与服务器端通讯部分的代码:客户端:if (e.getSource() = sentButton)/ 如果监听到发送信息按钮被点击trymywords = inMsgField.getText();if (mywords.trim().length() != 0) / 不能发送空消息也不能都发空格if (withWho.equals(所有人)outmsg = mywords;/ 发送到服务器out.println(outmsg);out.flush();/ 显示到我的频道里面insert(myMsgArea, myName + : + mywords);/myMsgArea.setCaretPosition(myMsgArea.getText().length(/ ); else / 对某个人交谈outmsg = withWho + & + privateFalse + &+ withWho + & + mywords;if (privateTalkFlag)outmsg = withWho + & + privateTure + &+ withWho + & + mywords;insert(myMsgArea, 您对 + withWho + 说: + mywords);/ myMsgArea.setCaretPosition(myMsgArea.getText()./ length(); elseinsert(myMsgArea, myName + 对 + withWho + 说: + mywords);/myMsgArea.setCaretPosition(myMsgArea.getText().length(/ );/ 发送到服务器out.println(outmsg);out.flush(); catch (Exception ee)ee.printStackTrace();insert(myMsgArea, 与服务器连接中断,请重新登录!);/ myMsgArea.setCaretPosition(myMsgArea.getText().length(); finallyinMsgField.setText(); / 清空输入框服务器端:/* * * 发送信息给所有的人*/public static void sendAll(String s)if (connections != null)for (Enumeration e = connections.elements(); / Enumeration过时的接口,/ 可以用for each循环e.hasMoreElements();)tryPrintWriter pw = new PrintWriter(Socket) e.nextElement().getOutputStream();pw.println(s);pw.flush(); catch (IOException ex)ex.printStackTrace();System.out.println(s);/* 发送信息给单独一个人*/public static boolean sendOne(String name, String msg)if (clients != null)for (Enumeration e = clients.elements(); e.hasMoreElements();)ClientProc cp = (ClientProc) e.nextElement();if (cp.getName().equals(name)tryPrintWriter pw = new PrintWriter(cp.getSocket().getOutputStream();pw.println(msg);pw.flush();return true; / 返回值为真,找到了这个人可以进行聊天 catch (IOException ioe)ioe.printStackTrace();return false;/ 没有找到这个人,应该是此人已经退出了聊天室2.3.4 文件传输模块此部分由同组其他同学完成。3. 测试结果3.1 测试环境及使用方法Windows XP Professional SP3 + JDK 1.6.0_18在局域网内一台主机上运行服务器端,其他机器运行客户端,登录时地址填写为服务器所在主机的IP地址。3.2 功能测试3.2.1 用户登录及用户列表个性登陆:登录框中包含个人名称,设置服务器和端口,选择性别。功能截图:无名氏登陆后再退出,系统广播无名氏退出了聊天室郭磊、仝志方登录,系统广播“上线了”好友列表中出现了郭磊、仝志方3.2.2 文本聊天 群聊群聊天功能:任意用户直接在编辑区编辑文字后点击发送,所有在线用户均可在群聊天界面看到聊天内容。功能截图:郭磊对仝志方公开打招呼郭磊对所有人打招呼在三人的聊天窗口中均收到了郭磊发出的两天信息 私聊私聊功能:若
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位工勤技能-江苏-江苏保健按摩师五级(初级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-广西-广西政务服务办事员三级(高级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广西-广西假肢制作装配工三级(高级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-广东-广东热力运行工四级(中级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东机械冷加工五级(初级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东地质勘查员二级(技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-安徽-安徽水生产处理工三级(高级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-北京-北京图书资料员三级(高级工)历年参考题库含答案解析
- 2025年银行金融类-金融考试-银行业专业人员初级历年参考题库含答案解析(5套)
- 2025年职业技能鉴定-铁路职业技能鉴定-铁路职业技能鉴定(铁路钢轨探伤工)中级历年参考题库含答案解析(5套)
- 2025《煤矿安全规程》新旧对照专题培训
- 【艾瑞咨询】2024年中国健康管理行业研究报告494mb
- JJG 1036-2022电子天平
- GB/T 27703-2011信息与文献图书馆和档案馆的文献保存要求
- GB/T 14188-2008气相防锈包装材料选用通则
- 初中全册英语常用3500词分类大全
- 工程质量通病防治措施专项施工方案
- 设备检修管理流程图
- 堤防工程重点难点
- 卸料平台(落地搭设)验收记录表
- 新媒体研究方法教学ppt课件(完整版)
评论
0/150
提交评论