JAVA网络编程课程设计.doc

上传人:飞****2 文档编号:60953570 上传时间:2022-11-19 格式:DOC 页数:21 大小:727KB
返回 下载 相关 举报
JAVA网络编程课程设计.doc_第1页
第1页 / 共21页
JAVA网络编程课程设计.doc_第2页
第2页 / 共21页
点击查看更多>>
资源描述

《JAVA网络编程课程设计.doc》由会员分享,可在线阅读,更多相关《JAVA网络编程课程设计.doc(21页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、哈尔滨工业大学(威海)计算机学院JAVA网络编程课程设计验收及成绩评定表(项目组)项目名称局域网内的多功能聊天室职责学 号姓 名主 要 分 工用户登录,用户列表,文本聊天,整合文件传输,整合设计开始日期项目完成日期文 档 评 审 成 绩 (共50分)评审项目评审内容成绩标准评审成绩项目名称课题是否从实际出发,是否具有创意等10文档格式文档格式是否规范;文字是否规范;图表是否规范;术语是否准确等20分文档质量程序设计思想与整体框架是否清晰等20分文档总体评价总成绩程 序 功 能 完 备 性 评 审 成 绩 (共 50 分)评审项目评 审 内 容成绩标准评审成绩程序运行状况程序是否能正常运行;是否

2、出现死锁;是否遇到错误而中止运行10分程序正确性对于给定的输入数据,是否能得到正确的输出结果15分程序与文档的一致性程序与各种文档的内容是否一致5 分程序的代码量程序代码量的大小10分实现方法图形界面或命令行界面,美观程度5分实现语言面向过程或面向对象5分程序总体评价总成绩姓 名: 学 号: 院(系): 计算机科学与技术学院专 业:信息安全 任务起止日期: 课程设计题目:局域网内的多功能聊天室 问题阐述与分析: 网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。

3、在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。网络聊天是网络编程的典型应用之一,编写网络聊天软件对于学习网络编

4、程无疑有着很大的帮助。本软件旨在为同一局域网用户间提供便利的局域网服务,局域网用户可以通过此聊天软件在各终端相互发送聊天信息,同时可以快速传送文件,方便局域网用户间的快速有效通信。 工作量:1. 程序总体整体框架界面设计2. 用户登录模块设计3. 用户列表模块设计4. 文本聊天模块设计5. 文件传输模块设计6. 客户端及服务器端程序的整合 工作计划安排:查阅资料、需求分析、设计程序整体框架功能及界面:程序代码编写:程序整合、撰写报告 同组设计者及分工:文件传输模块整合工作共同完成。目录1. 序言11.1 背景11.2 相关技术11.2.1 JAVA概述11.2.2 套接字11.2.3 TCP三

5、次握手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 文本聊天113.2.2.1 群聊113.2.2.2 私聊123.2.2.3 字体设置133.2.3 文件传输144. 总结15参考文献161. 序言1.1 背景在网络越来越发达的今天,人们对网络的依赖越来越多,各种网络应用层出不穷,网络编程越来越

6、受大广大程序员的重视。网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般

7、作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。网络聊天是网络编程的典型应用之一,编写网络聊天软件对于学习网络编程无疑有着很大的帮助。本小组编写本软件,旨在通过软件的编写与实现,来提高对网络编程的理解和掌握。1.2 相关技术1.2.1 JAVA概述 JAVA语言有下面一些特点:简单、面向对象、分布式、解释执行、鲁棒、 安全、体系结构中立、可移植、高性能、多线程以及动态性。丰富的类库JAVA提供了大量的类以满足网络化、多线程、面向对象系统的需要。语言包提供的支持包括字符串处理、多线程处理、数学函数处理等

8、,可以用它简单地实现JAVA程序的运行平台。实用程序包提供的支持包括哈希表、堆栈、可变数组、时间和日期等。输入输出包用统一的流模型来实现所有格式的I/O,包括文件系统、网络、输入低级网络包用于实现Socket编程。抽象图形用户接口包实现了不同平台的计算机的图形用户接口部件, 包括窗口、菜单、滚动条、对话框等,使得JAVA可以移植到不同平台的机器。网络包支持Internet的TCP/IP协议,提供了与Internet的接口。它支持URL连接,WWW的即时访问,并且简化了用户/服务器模型的程序设计。JAVA和C、C+对于变量声明、参数传递、操作符、流控制等使用了相同的传统,使得熟悉C、C+的程序员

9、能很方便地进行编程。同时, JAVA为了实现其简单、鲁棒、安全等特性,也摒弃了C和C+中许多不合理的内容。1.2.2 套接字Socket,简称套接字,用于实现网络上客户和服务器之间的连接。也就是说网络上两个或两个以上双工方式通信的进程之间总有一个连接,这个连接的端点成为套接字,套接字是在比较低的层次上通信的。具体的说:一个服务器应用程序一般侦听一个特定的端口等待客户端的连接请求,当一个连接请求到达时,客户端和服武器端建立一个通信连接,在连接过程中,客户端被分配一个本地端口与一个Socket建立连接,客户端通过写Socket来通知服务器,以读Socket中的信息,类似的服务器也获得一个本地端口,

10、它需要一个新的端口号来侦听原始端口上的其他连接请求。服务器也通过它的本地端口连接一个Socket,通过读写和客户端通信。Socket程序的工作过程:1.建立Socket连接:在通信开始之前由通信双方确认身份,建立一条专用的虚拟连接道。2.数据通信:利用虚拟连接通道传送数据信息进行通信。3.关闭:通信结束时,再将所建的虚拟连接拆除。1.2.3 TCP三次握手第一次握手:原主机发送一个带有本次连接的序号的请求的一个数据帧第二次握手:目的主机收到请求后,如果同意连接,则发回一个带有一个本次连接序号和源端机连接序列号的确认。第三此握手:源端机收到含有两次初始序列号的应答后,再向目的主机发送一个带有两次

11、连接的序列号的确认。具体过程如下:2. 程序设计与实现2.1 需求分析做为一个局域网内的即时聊天程序,除了基本的聊天功能,文件传输也是经常用到的功能。本软件需具有以下几个功能:1. 用户登录设立一个服务器,实现多用户即时通讯;用户在登录的同时需输入一些个性化的信息,以便于各用户之前的识别。2. 文本聊天聊天室功能,即所谓的群聊,聊天内容所有人可见;保密聊天功能,即所谓的私聊,聊天内容仅聊天双方可见;用户可对字体进行设置。3. 文件转输多线程,收发可同时进行。2.2 程序结构2.2.1 多用户在线方案采用客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需

12、要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。2.2.2 软件框架TCP SocketClientPublic TalkingServerPrivate TalkingFiles TransUser ListConnect/logonUsers2.3 代码实现开发环境:Windows XP Professional SP3 + JDK 1.6.0_18 + NetBeans IDE 6.82.3.1 用户登录模块只列出程序界面以及与服务器端通讯部分的代码:客户端:

13、 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

14、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)

15、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 用户列表模块只列出程序界面

16、以及与服务器端通讯部分的代码:客户端: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) / 不能添

17、加自己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(nam

18、e); 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 n

19、ame;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 =

20、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_

21、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, myNam

22、e + : + mywords);/myMsgArea.setCaretPosition(myMsgArea.getText().length(/ ); else / 对某个人交谈outmsg = withWho + & + privateFalse + &+ withWho + & + mywords;if (privateTalkFlag)outmsg = withWho + & + privateTure + &+ withWho + & + mywords;insert(myMsgArea, 您对 + withWho + 说: + mywords);/ myMsgArea.setCar

23、etPosition(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.setCaretPo

24、sition(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)

25、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 = (ClientP

26、roc) 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 测试环

27、境及使用方法Windows XP Professional SP3 + JDK 1.6.0_18在局域网内一台主机上运行服务器端,其他机器运行客户端,登录时地址填写为服务器所在主机的IP地址。3.2 功能测试3.2.1 用户登录及用户列表个性登陆:登录框中包含个人名称,设置服务器和端口,选择性别。功能截图:无名氏登陆后再退出,系统广播无名氏退出了聊天室郭磊、仝志方登录,系统广播“上线了”好友列表中出现了郭磊、仝志方3.2.2 文本聊天3.2.2.1 群聊群聊天功能:任意用户直接在编辑区编辑文字后点击发送,所有在线用户均可在群聊天界面看到聊天内容。功能截图:郭磊对仝志方公开打招呼郭磊对所有人打招

28、呼在三人的聊天窗口中均收到了郭磊发出的两天信息3.2.2.2 私聊私聊功能:若在用户显示界面双击某位在线用户并且在聊天室界面最下部勾选“私聊”,则可以进行私聊,只有聊天双方可在悄悄话界面看到自己的聊天内容。功能截图:郭磊对仝志方发出私人消息仝志方在“消消话”中收到了郭磊发出的私人消息无名氏的聊天窗口中没有看到认何有关郭磊发送私人消息给仝志方的信息3.2.2.3 字体设置在编辑区录入文字时,可对字体进行设置。功能截图:3.2.3 文件传输文件传输功能:用户在用户显示界面双击要发送到的联系人,勾选“私聊”选框后,把要发送的文件拖拽到“欲发送的文件”区域,点击“发送文件”按钮即可。若开始或中途想放弃

29、传送则可单击“取消发送”按钮。用户点击发送后,在悄悄话区域会告知接收者发来文件,若接收者接收则单击“接收文件”按钮,然后设定本地保存位置;若不接收则点击“拒绝接收”按钮。功能截图:在点击保存后,会弹出窗口等待用户选择保存路径文件传输为多线程任务,支持同时传送和接收文件4. 总结JAVA网络编程课程设计,让我有很多的收获与体会。在整个课程设计的过程中,我对JAVA网络编程的相关知识有了进一步的了解和掌握。此外,在完成设计的过程中,我查阅了不少资料,我的相关知识体系得到了一个系统性的复习、深入和锻炼。当然,这次课程设计也暴露出了我的一些不足。整个过程进行得比较吃力,说明我对知识的掌握以及平时的训练

30、还比较欠缺。应当以此次课程设计为引导,趁热打铁,对相关知识进行进一步的巩固。参考文献:1 Bruce EckelJava编程思想M北京:电子工业出版社,20062 Cay S Horstmann,Gary CornellJava2核心技术M北京:机械工业出版社,20063 陈刚Eclipse从入门到精通M北京:清华大学出版社,20054 王森快易通Java程序设计M北京:北京大学出版社,20005 叶至军由浅入深Java2自学手册M北京:人民邮电出版社,20046 王森Java语言程序设计M北京:清华大学出版社,20057 Art Taylor,Randy Layman,Brian BuegeJ2EE Java黑客大曝光:开发安全的Java应用程序北京:清华大学出版社,2003

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com