版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、I基于 Java 的局域网飞鸽传书软件的设计与实现【摘摘 要要】 为了方便内部网络的用户之间的沟通,我们需要开发一个基于局域网的信息共享工具。本课题设计主要针对局域网通讯而开发设计的,采用的是 C/S 构架,类似飞鸽传书系统,来实现聊天、文件传输功能。本设计以 JAVA 编写,能在 windows 2000/net/xp 等环境下运行。设计共分为五大部分,分别是:1.选题背景及意义和国内外研究现状;2.TCP/IP 点对点协议技术,C/S 架构和SOCKET 网络编程技术;3.对系统进行需求分析并提出解决方案;4.根据解决方案设计系统;5.测试系统并得到测试结果。【关键词关键词】 聊天 传输
2、socket 飞鸽传书 C/S 结构 JAVADesign and Implementation IP Messenger Based on LAN and Java Technology【Abstract】 In order to facilitate internal communication between network users, we need to develop one tool to share information. This topic design mainly aims at the local area network communication, use t
3、he C/S structure, like IP messenger, for chat and files transmission.This system is developed by JAVA and can run in the invironment of windows 2000/net/xp . The design altogether divides into five big parts, respectively is: 1. Selected topic background and significance, domestic and foreign resear
4、ch present situation; 2. TCP/IP point to point protocol technology, C/S structure and socket network programming technology; 3. Analyze the demand of this system and propose the solution; 4. According to the solution we design the system; 5. Test the system and obtains the test result.【Key words】 ch
5、at transmission socket IP messenger C/S structure java目 录绪论. 11 研究内容 .21.1 TCP/IP. 21.2 主要研究思路和方法.31.3 研究系统的目的以及意义.31.4 JAVA SOCKET.32 系统需求分析 .92.1 系统设计目标.92.2 系统总体需求分析.92.3 组织结构的分析.92.3.1 开发运行环境 .102.3.2 系统开发语言 .103 系统开发分析.113.1 C/S 软件架构技术 .113.2 用户数据报协议(UDP).113.3 单播、广播、组播浅析.114 系统设计.134.1 文字聊天模块的
6、整体构架.134.2 文件传输模块的主要流程图.134.3 系统主要功能模块.144.3.1 系统的主登录界面 .144.3.2 文字聊天信息的封装 .164.3.3 文件传输的界面 .185 系统测试.245.1 测试环境.245.2 测试结果.24结 论 .27参考文献 .28附 录 .29致 谢 .341绪论 当人类进入到崭新的 21 世纪后,网络通讯在当今已不算新鲜事物,当今世界的主题也转变为了以知识和信息为主的新时代。信息的需求量和运算量的不停增加,使得计算机通信技术有了突飞猛进的变化。网络的使用频率和使用的范围都越来越广泛,但是人们使用网络的用途主要有两个:(1)相互之间的沟通,(
7、2)资源共享。局域网作为网络的一个重要组成部分,它不但是用户与外界环境连接的枢纽,同时也是近距离用户之间沟通与资源共享的一个重要途径。在这种前提下,如何使局域网内的用户能够进行便捷的沟通,以及得到快速的资源共享,也就成为了人们研究网络问题的重点之一。目前大多数网络通讯都需要借助 Internet 上的服务器,这就给那些具有大规模内部网络的用户造成许多问题,如浪费网络资源、遭到网络攻击、传播病毒、破坏防御系统等等。互连网上的网络通讯工具给企业内部信息交流带来了不便,所以为了方便内部网络用户之间的沟通,需要开发一个基于局域网的信息收发系统的即时通讯工具,实现内部网络的信息交流。本系统是参考目前比较
8、流行的局域网即时通讯软件“飞鸽传书”的基础上开发设计的,是一个局域网内的通迅工具,主要通过 socket 完成。它据有的主要功能有以下两点:(1).局域网内用户间简单的文字聊天功能。(2).局域网内用户间相互的文件、文件夹传输。21 研究内容1.1 TCP/IP随着计算机技术和通讯技术的飞速发展,计算机网络化已经渗透到各行各业,尤其是以 TCP/IP 协议之间的网络互连发展速度很快,计算机应用系统的开发方向已经由传统的单机方式转向到了网络环境的开发。网络之间每台计算机进行数据通讯时,都是使用具体地址来标识网络中的计算机,只有有了地址以后,数据才会准确地发送到地址所指向的计算机。TCP/IP 协
9、议使用 IP 地址为网络中计算机的标识,而且每台计算机的 IP 地址是唯一的,一般情况下,每台计算机运行的程序不止一个,因此要在应用程序中建立连接的话,还需要一个地址标识。11TCP/IP 传输控制协议 /网际协议,是 internet 最基本的协议。 供已连接因特网的计算机进行通信的通信协议。 TCP/IP 在私网中,它也被用作通信协议。当你直接网络连接时,你的计算机应提供一个TCP/IP 程序的副本,此时接收你所发送的信息的计算机也应有一个 TCP/IP 程序的副本。 TCP/IP 是一个两层的程序。高层为传输控制协议,它负责聚集信息或把文件拆分成更小的包。这些包通过网络传送到接收端的TC
10、P 层,接收端的 TCP 层把包还原为原始文件。低层是网际协议,它处理每个包的地址部分,使这些包正确的到达目的地。网络上的网关计算机根据信息的地址来进行路由选择。即使来自同一文件的分包路由也有可能不同,但最后会在目的地汇合。 TCP/IP 使用客户端/服务器模式进行通信。 TCP/IP 通信是点对点的,意思是通信是网络中的一台主机与另一台主机之间的。 在 TCP/IP 协议中使用了端口(PORT)作为计算机上运行的应用程序的标识,因此 TCP/IP 协议中一个有效的网络地址包括 IP 地址和端口地址两个部分。TCP/IP 协议提供两种计算机之间进行通讯的方式:TCP 方式和 UDP 方式。11
11、TCP 是当应用程序要得到完整且可信赖的数据时所采用的传输控制协议,是一种面向连接的服务,TCP 会在传输的过程中多了许多确认的动作以确定数据的正确性。在文件传输时会先行建立连接,通过链接提供双向、有序且无重复的数据流服务、以及流量控制、差错检测和纠错等服务,从而确保文件传输的正确性;而 UDP 比起 TCP 是要简单许多,UDP 是一种无连接的服务,它在传输文件时不会确保传输端的文件能够正确无误的传送到接收端,所以 UDP 传输数据通常会遗失却不见得再重新传输一次,所以当使用 UDP 时,通常要自己作接收确认的工作。因此使用 UDP 的应用程序着重于简洁和效率以完成工作,它不需要像 TCP
12、一般复杂的手续就可以达到交换信息的目的。11飞鸽传书是由日本人 Shirouzu Hiroaki 发明的免费软件,是一款局域网内基于 3TCP/IP(UDP)的即时通信软件。该软件不需要服务器支持可运行于多种操作平台(Win/Mac/UNIX/Java),并实现跨平台信息交流。该软件支持文件/文件夹的传送,目前已有的版本包括: Win32, Win16, MacOS, MacOSX, X11, GTK, GNOME,Java 等,并且公开源代码。飞鸽传书目前最新版本是飞鸽传书 2010,绿色软件,体积小巧,无需安装。它支持文字通讯,文件(夹)传输,语音视频,远程控制等多媒体功能。具有群聊、多人
13、语音、多人视频、网络会议室等专业即时通讯软件功能。可局域网用户自动搜索,也可架设服务器进行统一管理。局域网,互联网均可使用,内外网互通,可与联信UM/Gmail/Jabber 等 XMPP 标准通信服务器互通。飞鸽传书中文版 Ver2.06 由阿志于 2004年 11 月制作,是一款飞鸽传书的经典版本。它支持局域网文字通讯,文件(夹)传输局域网用户自动搜索,简单快捷,仅适用于局域网使用。101.2 主要研究思路和方法本系统的开发采用基于 Java socket 的广播发送模式,进行文字聊天和文件、文件夹传输的设计与开发。因此,本设计首先分析该系统的相关功能,结合本设计的相关要求写出需求分析;其
14、次,综合运用以前所学的相关知识,选择所熟悉的开发工具进行本设计的开发;在设计中以需求分析为基础,写出系统开发计划、实现流程及相关问题的实现方法;最后,在系统开发完毕后,进行调试和运行,做好调试和运行的相关记录。1.3 研究系统的目的以及意义随着互联网技术的迅猛发展,网络给人们带来了非常多的便利,比如人们借助于网络进行相互交流已经变得越来越方便。聊天工具作为互联网中运用最为广泛的通信工具之一,如今都已被广大网民所接受和喜爱。很多人都使用过飞鸽传书软件,尤其对于需要在局域网内进行大量数据传输的人来说,飞鸽传书软件备受亲睐。飞鸽传书发展到现在已经具有了很多功能:有文字聊天、文件、文件夹传输的基本功能
15、,也有密封、加锁等较为复杂的功能。本毕业设计的目的主要是为了检查使学生综合运用以前所学知识(包括以前所学的一些关于网络、编程、信息安全等知识)的能力,模拟局域网飞鸽传书软件,开发一个基于 Java 的飞鸽传书局域网通信软件,本毕业设计主要实现局域网内文字聊天及文件传输等功能。本设计中程序用 Java 编写,能在 Windows 2000/net/xp 等环境下运行。主要研究的内容有:TCP/IP 点对点协议技术,C/S 架构和 SOCKET 网络编程技术,对当前局域网文件传输进行需求分析并提出解决方案和对解决方案进行设计,完成局域网内用户间文字聊天功能,完成局域网内用户间相互的文件、文件夹传输
16、功能,对工作计划统计以及分析系统进行测试并得到测试结果。1041.4 Java Socketsocket 通常也称作套接字,用于描述 IP 地址和端口,是一个通信链的句柄。应用程序通常通过套接字向网络发出请求或者应答网络请求。以 J2SDK-1.3 为例,Socket 和 ServerSocket 类库位于 包中。ServerSocket 用于服务器端,Socket 是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个 Socket 实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是 Socket 还
17、是 ServerSocket 它们的工作都是通过 SocketImpl 类及其子类完成的。重要的 Socket API:.Socket 继承于 java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法。.Accept 方法用于产生阻塞,直到接受到一个连接,并且返回一个客户端的Socket 对象实例。阻塞是一个术语,它使程序运行暂时停留在这个地方,直到一个会话产生,然后程序继续;通常阻塞是由循环产生的。.getInputStream 方法获得网络连接输入,同时返回一个 IutputStream 对象实例,。.getOutputStream 方法连接的另一端将得到
18、输入,同时返回一个 OutputStream 对象实例。例如开发一个 Server-Client 模型的程序。它的开发原理如下:服务器:使用 ServerSocket 监听指定的端口,端口可以随意指定(由于 1024 以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于 1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。客户端:使用 Socket 对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭 Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个 1024 以上的端口。建立服务器im
19、port .*;import java.io.*;public class Server5private ServerSocket ss;private Socket socket;private BufferedReader in;private PrintWriter out;public Server()tryss = new ServerSocket(10000);while (true)socket = ss.accept();in = new BufferedReader(new InputStreamReader(socket.getInputStream();out = new
20、 PrintWriter(socket.getOutputStream(),true);String line = in.readLine();out.println(you input is : + line);out.close();in.close();socket.close();6ss.close();catch (IOException e)public static void main(String args)new Server();这个程序建立了一个服务器,它一直监听 10000 端口,等待用户连接。在建立连接后给客户端返回一段信息,然后结束会话。这个程序一次只能接受一个客户
21、连接。客户端:使用 Socket 对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭 Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个 1024 以上的端口。建立客户端import java.io.*;import .*;public class ClientSocket socket;7BufferedReader in;PrintWriter out;public Client()trysocket = new Socket(xxx.xxx.xxx.xxx, 10000);in = new BufferedReader(new Inp
22、utStreamReader(socket.getInputStream();out = new PrintWriter(socket.getOutputStream(),true);BufferedReader line = new BufferedReader(new InputStreamReader(System.in);out.println(line.readLine();line.close();out.close();in.close();socket.close();catch (IOException e)8public static void main(String ar
23、gs)new Client();这个客户端连接到地址为 xxx.xxx.xxx.xxx 的服务器,端口为 10000,并从键盘输入一行信息,发送到服务器,然后接受服务器的返回信息,最后结束会话。992 系统需求分析2.1 系统设计目标根据对飞鸽传输系统的调查研究,本设计主要需要满足以下几个系统设计目标:(1). 可靠性原则:必须为用户提供安全可靠的服务,尤其是要保证数据传输的稳定性。(2). 实用性原则:按照真正为局域网的实际工作服务的要求,按照需求的大小,合理地设计本系统。(3). 友好性原则:考虑到本系统的使用人群大众化,所以本系统操作上要求简单方便,便于用户掌握,界面上争取做到简洁美观。
24、(4). 可扩展性原则:本系统采用开放的标准和接口,方便于以后系统向更大的规模和功能扩展。12.2 系统总体需求分析根据需求分析,本系统分为两个子系统:(1).局域网内简单文字聊天子系统,它是在局域网内选择相应的用户,以便对之发送文字信息。(2).文件、文件夹传输系统,它是在先把需要传输的文件、文件夹转换成相应的数据流进行传输,到了目的主机再进行还原。本系统的文字聊天子系统实现的功能类似于、MSN 用户之间的聊天。在设计系统时,应根据简洁、流畅的特点安排布局,在编制程序时应充分考虑数据传输的稳定、快捷,真正做到“简洁、高效、流畅、安全”的使用环境。用户使用的过程大致为:用户开启本软件,软件自动
25、检索局域网的其它用户,显示用户列表,用鼠标可以任意选择用户列表里面的用户。当发现需要连接某个用户之后,双击该用户,则弹出对话窗口。用户可以在这里发送消息或者文件。作为接收方的话,可以选择接收或者拒绝相应的传输文件。102.3 组织结构的分析组织结构图如图 1 所示:图 1 组织结构图2.3.1 开发运行环境开发运行本系统所需要的软、硬件环境为:(1). Pentium100 及以上档次的 IBM PC 及其兼容机;(2). Windows95、 Windows98 或 WindowsNT/2000/XP;(3). 1G 以上可用硬盘空间;(4). 128M 以上内存措施;(5). 显示器;以上
26、的配置要求为同一局域网内的计算机两台或两台以上。2.3.2 系统开发语言本系统是在 Windows XP 操作系统下,采用 eclipse 开发工具,使用 Java 语言开发的。Java 是一种很优秀的编程语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的Java 程序设计语言和 Java 平台的总称。是目前软件设计中极为壮健的编程语言,Java的诞生是对传统计算机模式的挑战,对计算机软件开发和软件产业都产生了深远的影响。Java 作为一种程序设计语言,它简单、面向对象、不依赖于机器的结构、具有可移植性、安全性、并且提供了并发的机制,具有很高的性能。其次, Jav
27、a 还提供了丰富的类库涉及加解密、消息摘要等,使程序设计者可以很方便地调用这些方法进行二次开发。另外,在 JDBC 诞生之后,Java 在数据库应用领域获得了成功的应用,大大降低了 Java11语言操作数据库的复杂程度,可以将重心放在功能实现上。33 系统开发分析3.1 C/S 软件架构技术C/S(Client/Server)结构,即大家熟知的客户机/服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到 Client 端和 Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是 Client/Server 形式的两层结构,由于现在的软件应用系
28、统正在向分布式的 Web 应用发展,Web 和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。63.2 用户数据报协议(UDP)UDP(User Datagram Protocol):用户数据包协议,它和 TCP 一样位于传输层,和IP 协议配合使用,在传输数据时省去包头,但它不能提供数据包的重传,所以适合传输较短的文件。由于大多数网络应用程序都在同一台机器上运行,计算机上必须能够确保目的地机器上的软件程序能从源地址机器处
29、获得数据包,以及源计算机能收到正确的回复。这是通过使用 UDP 的“端口号”完成的。源端口号标识了请求域名服务的本地机的应用程序,同时需要将所有由目的站生成的响应包都指定到源主机的这个端口上。与 TCP 不同,UDP并不提供对 IP 协议的可靠机制、流控制以及错误恢复功能等。由于 UDP 比较简单,UDP头包含很少的字节,比 TCP 负载消耗少,所以 UDP 适用于不需要 TCP 可靠机制的情形,比如,当高层协议或应用程序提供错误和流控制功能的时候。UDP 是传输层协议,服务于很多知名应用层协议,包括网络文件系统(NFS) 、简单网络管理协议(SNMP) 、域名系统(DNS)以及简单文件传输系
30、统(TFTP) 。8123.3 单播、广播、组播浅析硬件组播(multicasting)是一种多点投递的形式,它使用硬件技术,通过使用大量组播地址来通信。当某一组机器需要通信时,选择一个组播地址,并配置好相应的网络接口硬件,识别组播地址,从而收到该组播地址上分组的拷贝。广播(broadcasting)是多点投递的最普遍的形式,它向每一个目的站投递一个分组的拷贝。它可以通过多个单次分组的投递完成,也可以通过单独的连接传递分组的拷贝,直到每个接收方均收到一个拷贝为止。在多数网络中,用户是通过把分组分送给一个特殊保留的地址即广播地址(broadcast address)来进行广播投递,它的主要缺点是
31、会耗费大量的主机资源和网络资源。单播(unexacting)是指只有一个目的地的数据报传递。从投递目的地的数量而言,单播和广播均可看作是组播的一个子集。单播可以看作仅包括一台机器群组的组播;广播可以看作包含了所有机器群组的组播。但从数据报的投递方式而言,单播、广播和组播还是有较大的区别。8134 系统设计4.1 文字聊天模块的整体构架本系统文字聊天是采用 C/S 结构,所以每个客户端也作为服务器端,当系统发送信息给局域网的用户,主要由单播模块和广播模块来实现,而其中的单播模块和用户信息模块是具有依赖性的,在接收信息的时候又有两个模块来完成,一是信息接收的模块,另一个是信息查看的模块。(1) 发
32、送模块:单播模块,广播模块,用户信息模块,信息记录模块。(2) 接收模块:接收信息模块,查看信息模块。综上所述,系统的架构图如图 2 所示:图 2 系统架构图4.2 文件传输模块的主要流程图由于本模块采用 C/S 架构故将系统运行载体分为两个部分:客户端与服务器端。文件传输需要建立有效的连接后,通过 TCP/IP 协议实现点对点的文件传输。通信双方是通过三次握手建立连接,实现文字、文件传输,最后关闭套节字连接。整个流程图如图 3所示:14图 3 系统流程图4.3 系统主要功能模块4.3.1 系统的主登录界面由于系统的用户设计是针对的用户日常活动,而非专门从事计算机操作的人员,所以本系统力求界面
33、友好、简单,以便给用户提供一个舒适的使用环境。在文字聊天模块的主要目标是简捷方便。为了方便用户选取单个用户进行信息发送和查看在线用户的信息,所以设计了一个ListView 来进行显示如图 4,在 ListView 中包括了用户名、工作组、用户级数等。当有用户打开本系统的时候将会向局域网中的所有用户发送一个握手信息来获取网络中的在线用户信息并添加到列表中显示出来,同时也把自己的网络资源信息发送给对方,使自己被添加到其他用户的列表中。登录界面,如图 4 所示:15图 4 启动主界面在发送时将会把信息发送给在局域网内部的所有用户包括自己。选择用户并输入发送信息,单播发送的按钮为 jmmenuitem
34、8,主要是通过 Id UDP Server 和 Id UDP Client组件来编写的,由 client. Send Buffer 语句来发送的,主要是对局域网内部的同一工作组用户发送信息。广播发送的按钮为 jmmenuitem9,主要是通过 Id UDP Server 和 Id UDP Client 组件来编写的,主要是使用了 client. Broadcast 来对信息,如图 5 所示:图 5 用户选择图其中主要的代码为:private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) / GEN-FIRST:ev
35、ent_jMenuItem2ActionPerformed/ TODO add your handling code here:int selectLen;if (selectLen = this.guiUserList.getSelectedIndices().length) 1) this.GuiTips.setText(请选择用户!);return; else if (selectLen = 1) User usr = GlobalVar.getUser(String) this.guiUserList.getSelectedValue();16UtilityGui.showNotice
36、(this, 昵称 : + usr.getName()+ GlobalVar.NEW_LINE + ip : + usr.getIp()+ GlobalVar.NEW_LINE + 组别 : + usr.getGroup()+ GlobalVar.NEW_LINE + 主机 : + usr.getHost(); else Object o = this.guiUserList.getSelectedValues();User usr;StringBuffer sb = new StringBuffer();sb.append(昵称:ip:组别:主机 + GlobalVar.NEW_LINE);
37、for (int i = 0; i o.length; i+) usr = GlobalVar.getUser(String) oi);sb.append(usr.getName() + : + usr.getIp() + : + usr.getGroup() + : + usr.getHost()+ GlobalVar.NEW_LINE);UtilityGui.showNotice(this, sb.toString();/ GEN-LAST:event_jMenuItem2ActionPerformed4.3.2 文字聊天信息的封装封装是一种把多次聊天的的数据捆绑在一起,使这两者不受外界干
38、扰和误用的机制.封装可被理解为一种用做保护的包装器,以防止代码和数据被包装器外部所定义的其他代码任意访问.对包装器内部代码与数据的访问通过一个明确定义的接口来控制.封装代码的好处是每个人都知道怎样访问代码,进而无需考虑实现细节就能直接使用它,同时不用担心不可预料的副作用.程序插件自动生成封装功能。并且在聊天过程中,封装的过程仍在持续,聊天的内容是边封装数据包边传输。发送信息接收界面,如图 6 所示17图 6 接收界面其中实现的主要代码为:public class MsgDaemonServer extends Thread public MsgDaemonServer() /*try Util
39、ityNet.msgSocket = new DatagramSocket(GlobalConstant.IPMSG_DEFAULT_PORT); catch (SocketException ex) */ Override public void run() try byte buf = new byteGlobalConstant MAND_LEN; DatagramPacket recv = new DatagramPacket(buf, buf.length); Command tmpCom; while (true) UtilityNet.msgSocket.receive(recv
40、); if(GlobalVar.BLACK_LIST.contains( recv.getAddress().getHostAddress()continue; byte buf2 = new byterecv.getLength(); System.arraycopy(recv.getData(), 0, buf2, 0, recv.getLength();18 if (tmpCom = Command.createCommand( buf2, recv.getAddress().getHostAddress() != null) / System.out.println(2+recv.ge
41、tAddress().getHostAddress(); GlobalVar MAND_QUEUE_EMPTY.acquire(); / System.out.println(3+recv.getAddress().getHostAddress(); GlobalVar.pushCommand(tmpCom); GlobalVar MAND_QUEUE_fULL.release(); catch (SocketException ex) catch (IOException ex) catch (InterruptedException ex) 4.3.3 文件传输的界面和聊天功能一样,我们也
42、要求界面尽量地简单,便于操作。与聊天功能不一样的是文件与文件夹的传输的安全性和速度要求比较高,本系统的简单加锁功能在局域网这种比较单一的环境下能够实现。文件传输的过程中流程为首先客端的主机通过 TCP/IP 协议建立链接,然后客户机发送套节字请求,通过 3 次握手连接响应,再转换数据为 socket 流传送,最近通过 3 次握手断开连接响应。选择用户并拖入相应所要传送的文件及文件夹,如图 7 所示:19图 7 文件传输界面点击所发送的文件为文件另存为,界面如图 8 所示:图 8 选择存储路径选择路径确定后,文件开始传输。其传送界面,如图9 所示:20图 9 文件传输中其中实现的主要代码为: /
43、发送目录 private void sendDir(FileLinkList flist,FileNode fnode)/ System.out.println(进入目录+fnode.getFileName(); if(this.sendDir(new File(fnode.getFileName() fnode.setIsTransfered(true); flist.setActive(false); if(flist.isTanstered() GlobalVar.delFileList(flist.getPacketNo(); else flist.setActive(false);
44、private boolean sendDir(File file) if(file=null| (!file.isDirectory()&!file.isFile()return false;/ if(file.isDirectory()System.out.println(发送目录 : +file.getPath();/ else System.out.println(发送文件 : +file.getPath(); if(!this.sendSubDir(file)return false; if(file.isDirectory() Filesubdir=file.listFiles()
45、; int i,count=subdir.length;21 for(i=0;icount;i+) if(!this.sendDir(subdiri)return false; if(!this.sendSubDir(null)return false; return true; private boolean sendSubDir(File file) try this.outputStream.write( this.createHeader(file).getBytes(GlobalVar.CHARACTER_ENCODING); if (file!=null&file.isFile()
46、 if(!this.sendFile(file.getPath()return false; return true; catch (IOException ex) return false; private String createHeader(File file) String res; if (file = null) res = :.:0: + Integer.toHexString(GlobalConstant.IPMSG_FILE_RETPARENT) +/ 00000003 + :0:; else res = : + file.getName() + : + Long.toHe
47、xString(file.length() + : +/ 000000000: + (file.isDirectory() ? Integer.toHexString(GlobalConstant.IPMSG_FILE_DIR) : Integer.toHexString(GlobalConstant.IPMSG_FILE_REGULAR)22 +:0:; try return UtilityGlobal.dec2Hex( res.getBytes(GlobalVar.CHARACTER_ENCODING).length + 8)+res; catch (UnsupportedEncoding
48、Exception ex) return null; /发送文件 private void sendFile(FileLinkList flist,FileNode fnode) if(this.sendFile(fnode.getFileName() fnode.setIsTransfered(true); flist.setActive(false); if(flist.isTanstered() GlobalVar.delFileList(flist.getPacketNo(); else flist.setActive(false); private boolean sendFile(
49、String filePath) try DataInputStream fis = new DataInputStream( new BufferedInputStream( new FileInputStream(filePath); byte buf = new byteGlobalConstant.DEFAULT_F_LENGTH; int read = 0; while (true) if (fis != null) read = fis.read(buf); 23 if (read = -1) break; this.outputStream.write(buf, 0, read)
50、; this.outputStream.flush(); fis.close(); return true; catch (SocketException e) return false; catch (IOException e) return false; private void exit() try this.inputStream.close(); this.outputStream.close(); this.socket.close(); catch (IOException ex) 245 系统测试5.1 测试环境在同一局域网内的主机两台或以上,主机的最低配置: CPU PII
51、I8000 ,内存 SDRAM 64M,主机系统 WIN2000/XP/2003. 建议用户 CPU PIII,内存 256M 及以上。5.2 测试结果在上述软硬件环境下对此系统各个子模块功能作出测试,结果基本能够达到预期功能。下面为系统运行截图:系统主界面,如图 10 所示:图 10 系统主界面25选择用户窗口,如图 11 所示: 图 11 用户选择窗口 聊天窗口,如图 12 所示: 图 12 聊天窗口发送文件窗口,如图 13 所示:26 图 13 发送文件窗口选择要传输的文件,如图 14 所示: 图 14 选择文件 接收文件,如图 15 所示:27 图 15 接收文件结论随着互联网技术的飞
52、速发展,网络给人们带来了诸多的方便。在信息沟通和资源共享方面局域网以其快捷的速度和优异的准确率始终占有一席之地。局域网内的文字聊天以及文件、文件夹的传输的工具早已经为人们所创造、熟悉和使用。本系统的主要工作:1.了解开发系统的流程,把握需求分析,掌握系统的功能需求。2.根据系统的核心功能“文字聊天和文件共享”做好系统分析。3.借鉴其它相关的优秀软件,取长补短,在系统开发时可以少走弯路。4.收集资料、参考文献,为系统实现做准备。5.设计完成系统软件。选择适当的设计软件,主要用到 Java socket 控件的功能 。由于个人开发设计能力有限,系统还存在一些其它的技术性问题,还需在今后的工作实践中
53、不断总结和改善,增强自身开发能力。28参考文献参考文献1 梅兴文译.美Rogers Cadenhead. Java 编程入门经典.第 4 版.北京:人民邮电出版社,20072 王路群.Java 高级程序设计.北京:中国水利水电出版社,20063 陈轶、姚晓昆.Java 程序设计实验指导.北京:清华大学出版社,20064 赵文靖.Java 程序设计基础与上机指导.北京:清华大学出版社,20065 赵毅.跨平台程序设计语言Java.西安:西安电子科技大学出版社,20066 雍俊海.Java 程序设计习题集.北京:清华大学出版社,20067 朱福喜.Java 语言习题与解析.北京:清华大学出版社,2
54、0068 丁振凡.Java 语言实用教程.北京:北京邮电大学出版社,20059 Java8. 三步学会 Java Socket 编程. :/developer.51cto 10 :/ /11 谢希仁.计算机网络.北京:电子工业出版社,200829附录:其中主要的代码为:1:private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) / GEN-FIRST:event_jMenuItem2ActionPerformed/ TODO add your handling code here:int
55、selectLen;if (selectLen = this.guiUserList.getSelectedIndices().length) 1) this.GuiTips.setText(请选择用户!);return; else if (selectLen = 1) User usr = GlobalVar.getUser(String) this.guiUserList.getSelectedValue();UtilityGui.showNotice(this, 昵称 : + usr.getName()+ GlobalVar.NEW_LINE + ip : + usr.getIp()+
56、GlobalVar.NEW_LINE + 组别 : + usr.getGroup()30+ GlobalVar.NEW_LINE + 主机 : + usr.getHost(); else Object o = this.guiUserList.getSelectedValues();User usr;StringBuffer sb = new StringBuffer();sb.append(昵称:ip:组别:主机 + GlobalVar.NEW_LINE);for (int i = 0; i o.length; i+) usr = GlobalVar.getUser(String) oi);
57、sb.append(usr.getName() + : + usr.getIp() + : + usr.getGroup() + : + usr.getHost()+ GlobalVar.NEW_LINE);UtilityGui.showNotice(this, sb.toString();/ GEN-LAST:event_jMenuItem2ActionPerformed2:public class MsgDaemonServer extends Thread public MsgDaemonServer() /*try UtilityNet.msgSocket = new Datagram
58、Socket(GlobalConstant.IPMSG_DEFAULT_PORT); catch (SocketException ex) */ Override public void run() try 31 byte buf = new byteGlobalConstant MAND_LEN; DatagramPacket recv = new DatagramPacket(buf, buf.length); Command tmpCom; while (true) UtilityNet.msgSocket.receive(recv); if(GlobalVar.BLACK_LIST.c
59、ontains( recv.getAddress().getHostAddress()continue; byte buf2 = new byterecv.getLength(); System.arraycopy(recv.getData(), 0, buf2, 0, recv.getLength(); if (tmpCom = Command.createCommand( buf2, recv.getAddress().getHostAddress() != null) / System.out.println(2+recv.getAddress().getHostAddress(); G
60、lobalVar MAND_QUEUE_EMPTY.acquire(); / System.out.println(3+recv.getAddress().getHostAddress(); GlobalVar.pushCommand(tmpCom); GlobalVar MAND_QUEUE_fULL.release(); catch (SocketException ex) catch (IOException ex) catch (InterruptedException ex) 3:/发送目录32 private void sendDir(FileLinkList flist,File
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年阜阳幼儿师范高等专科学校单招职业倾向性考试题库附答案详解(能力提升)
- 2025年龙岩市直机关幼儿园莲东分园招聘备考题库及一套完整答案详解
- 2025年颍上县城乡水务有限公司公开招聘工作人员13人备考题库及答案详解(新)
- 【招聘预备考题库】湾区名校揽贤才公办编制+广阔平台邀你共赴出彩未来(2025年第二批)及答案详解参考
- 2025年中国人民大学党委宣传部招聘备考题库及答案详解参考
- 2025年广西自由贸易试验区外商投资促进中心公开招聘中层管理人员及工作人员备考题库参考答案详解
- 2025年襄阳有岗湖北省大学生乡村医生专项招录386人备考题库及答案详解(易错题)
- 2026年陕西警官职业学院单招职业技能测试题库含答案详解(轻巧夺冠)
- 2025年碑林区柏树林社区卫生服务中心招聘康复治疗师内科主治医师B超医师康复医师备考题库有完整答案详解
- 2025年施秉县马号镇中心卫生院公开招聘编外工作人员备考题库及1套参考答案详解
- 小学师德师风舆情监测与应对方案
- DB32∕ 3962-2020 绿色建筑设计标准
- 三农融资基础知识培训课件
- 保密资质管理办法
- 加筋土挡土墙设计与施工方案研究
- 注册管理办法附件
- 毕业设计(论文)-一种链式运输机传动装置设计
- 老年护理呼吸系统
- 提升团队执行力的关键因素
- 《建筑装饰设计收费标准》(2024年版)
- 电子商务平台供应商对接流程
评论
0/150
提交评论