基于java的局域网飞鸽传书设计与实现

毕业论文(设计)

题 目 基于Java的局域网飞鸽传书软件设计与实现

系 部 计算机科学与工程系

专 业 计算机科学与技术 年级 2009

学生姓名

学 号

指导教师

基于Java的局域网飞鸽传书软件设计与实现

计算机科学与技术

学生 指导教师

【摘要】 随着移动互联网的时代已经来临,社交应用广泛存在,这些应用加强了人与人之间的沟通;从小环境来说比如校园网,以及部分局域网在内的的各种交互也广泛存在。局域网之间的信息交互,并不一定要建立在互联网的基础上,本设计就是针对局域网这一环境,旨在通过设计基于Java程序设计语言的一个局域网内能够相互通信,和传输文件的软件,来增强自我实践能力,及了解通信软件的设计技术。

本设计是用Java语言编写的类飞鸽传书软件,可以实现简单的局域网内的主机之间的信息发送,以及文件的传输,实现较简单快速,主要采用了UDP中的数据报协议,Socket协议实现主机之间的通信。

【关键词】局域网 通信 传输 文件

IP Messenger-software design and implementation used in LAN

based on Java

【Abstract】As the age of mobile and Internet is coming , social applications is widespread, and these applications enhance communication between people at the same time; On the side from the environment, such as campus network, as well as the various interactions, including the part of the LAN is also widespread. Internet for information exchange between the LAN is not necessary, this design is for the local area network designed to communicate with each other within a local area network based on the Java programming language through this design, and transfer files software to enhance the ability of self-practice,and understanding of communications software design techniques.

The design,which included in the IP Messenger software is written in Java , can send information and make file transfers between the host. It is simple and fast, mainly uses the Matagorda Protocol UDP, Socket protocol communication between hosts.

【Keywords】LAN,Communication, transmission File

目录

第一章 绪论 ................................................................. 5

1.1研究现状 ............................................................ 5

1.2主要研究内容 ........................................................ 5

1.3论文结构 ............................................................ 6

第二章 需求分析及技术介绍 ................................................... 7

2.1软件运行环境及开发环境 .............................................. 7

2.1.1开发环境配置 .................................................. 7

2.2相关技术介绍 ....................................................... 10

2.2.1Eclipse开发工具的选择原因 .................................... 10

2.2.2Java介绍 ..................................................... 10

2.2.3 Java语言的图形化编程 ........................................ 11

2.2.4 Java的Socket编程 ........................................... 12

2.4设计目标 ........................................................... 12

2.4.1基本性能 ..................................................... 12

2.4.2开发目标 ..................................................... 12

第三章 系统设计 ............................................................ 13

3.1系统概要设计 ....................................................... 13

3.1.1软件用例图 ................................................... 13

3.1.2软件总体分析 ................................................. 14

3.2系统模块功能实现 ................................................... 15

3.2.1 广播模块 ..................................................... 15

3.2.2 发送文件模块 ................................................. 16

3.2.3 设置界面模块 ................................................. 17

3.2.4 文件数据导入模块 ............................................. 18

3.2.5监听模块 ..................................................... 19

3.2.6充当服务端模块 ............................................... 20

第四章 软件界面设计与程序主模块实现 ........................................ 22

4.1界面设计 ........................................................... 22

4.1.1界面布局 ..................................................... 22

4.1.2用户区域 ..................................................... 22

4.1.3聊天区域 ..................................................... 22

4.2主模块与功能模块的组织实现 ......................................... 23

4.2.1 主程序运行界面 ............................................... 23

4.2.2 MainFrame.java组成 .......................................... 24

第五章 软件调试与测试 ...................................................... 26

5.1获取用户ip功能测试 ................................................ 26

5.2发送文本消息模块测试 ............................................... 27

5.3文件传输模块测试 ................................................... 28

5.4设置模块测试 ....................................................... 30

第六章 总结 ................................................................ 31

参考文献 ................................................................... 32

附录 ....................................................................... 33

致谢 ....................................................................... 35

第一章 绪论

1.1研究现状

移动互联网背景下,通讯软件各种各样,通讯软件在各行各业中广泛应用,对于人与人之间的通信交流加强了人们沟通,局域网内的文件传输也促进了资源共享的便利;目前比较流行的通讯软件类别是即时通讯软件。

对目前市场上的即时通讯软件产品进行分析,可以发现, 这些软件除具备实时交谈和互传信息等功能外, 同时集成了数据交换、语音聊天、视频会议、电子邮件管理等功能。目前, 即时通讯软件正在积极向移动领域扩展, 努力增强其跨越平台的能力, 最大限度的实现互联网服务向移动领域的迁移。这使得即时通讯软件不仅是注重通讯功能的联系软件, 也是成为注重个人通讯录管理功能的移动设备管理系统。两者集成在一起变成一个集成通讯录、手机消息、即时通讯的个人沟通平台。另外, 即时通讯软件的协作工作和与其它软件整合的功能也在逐渐增加。近年来即时通讯产业正在移动领域努力推动它的应用, 例如将即时通讯嵌入移动终端系统之中, 并且可以实现与互联网同样功能的服务。

目前流行的通讯软件也叫做社交网络通讯软件,典型代表是腾讯公司的QQ,其服务器客户端模型如下图:

图1-1 服务器客户端模型图

1.2主要研究内容

本设计研究局域网下的简单的通讯软件,主要包括简单的PC用户之间的相互通信,相互之间能接收信息。局域网内能相互之间实现简单的文件共享传输。同时通过本设计了

解及掌握Java基本的网络通信方式,了解具体Java Socket的具体用法,实现局域网之间的通信传输。

本设计的最终目的是设计一个具有下列功能的软件,软件最终所实现的基本功能如下: 1:局域网内自动主机识别,即不需要手动添加主机;

2:实现局域网pc用户之间的文本消息发送;

3:实现局域网pc用户文件的传输;

4:简单的服务配置设置;

1.3论文结构

本论文分为六个章节,具体详细结构如下:

第一章:主要讲述论文的研究背景现状,本论文研究内容,及论文结构

第二章: 软件设计的需求分析,技术介绍,包括:运行环境,环境配置,相关涉及技术,及设计需求,目标等

第三章:软件的概要设计

第四章:软件的模块详细设计与实现

第五章:软件调试与测试

第六章:总结

参考文献与致谢

第二章 需求分析及技术介绍

2.1软件运行环境及开发环境

本系统的运行环境:操作系统:Windows 7旗舰版

PC硬件版本:制造商:lenovo;型号:lenovo Win7 PC;分级:3.4 Windows 体验指数;处理器:Intel(R)Core(TM)2 Duo CPU T5550 @1.83GHz 1.83GHz;安装内存(RAM):2.00 GB;系统类型:32位操作系统笔和触摸:没有可用于此显示器的笔或触控输入Lenovo 支持网站:联机支持

本系统开发环境:Java JDK 1.6;Eclipse Version: Indigo Release,Build id: 20110615-0604。

2.1.1开发环境配置

软件开发环境JDK配置:

JDK的是Java Development Kit的缩写,他是java开发的工具包,对于javaWeb开发必不可少。它包含Java运行环境即JRE,和java运行的基础类库,java工具包。在做相应开发之前,我们必须把java相应环境搭建好。

开发环境配置流程:

第一步,打开oracle公司网站主页:

http://www.oracle.com/technetwork/java/index.html(这里我们注意到sun公司已经被Oracle公司收购了所以,我们下载的时候打开的网页已经是Oracle公司的网页了,当然下载是免费的)。

第二步,在网页右侧位置点击 Java SE链接然后进行下载;

第三步,点击相应位置即上图Java SE处然后再点击相应页面的Download JDK 点击下载即可。

图2-1

第四步,下载完成后,双击安装

图2-2

点击 接受 按钮

图2-3

安装在默认目录即可

图2-4

安装过程可能会出现防火墙软件或别的杀毒软件警告,一律点允许即可。安装完成后需设置相应的环境变量。

安装完成后都需要设置三个环境变量:他们分别是PATH,JAVA_HOME, 和 CLASSPATH(不区分大小写):

JAVA_HOME:填写我们把JDK所安装的位置)

PATH:指向上面我们填写的jdk安装目录\bin

CLASSPATH:指向java程序的类路径

在桌面上点击“我的电脑”处右键—>属性,选择“高级”选项即可找到相应环境变量进行配置。这样,系统环境变量就设置好后,按下面的步骤即可检测是否配置成功。 测试是否安装成功的步凑:

第一步,打开DOS运行界面即输入CMD弹出dos界面

第二步,输入java后稍等几秒会输出如下图界面

图2-5

在输入javac测试会输出如下图所示

图2-6

如果出现图2-6所示的界面则安装配置JDK环境成功。

第三步,编写一个简单的java源程序测试。

源文件为Test.java。内容如下

public class Test {

public static voTopicId main(String args[]) {

System.out.println("This is a test program."); } }

用CD命令进入文件所在的根目录。输入 Test.java 命令编译该程序。编译成功后,可以看到多了一个后缀为".class"的文件。继续在命令行输入 java Test 命令,执行程序,程序输出的 “This is a test program.”字样。

Java的环境配置完成后开始Eclipse下载解压到相应路径,然后进行打开Eclipse安装WindowBuilder_Pro插件以便使用使用SWT_Designer进行图形化的界面设计。

2.2相关技术介绍

2.2.1Eclipse开发工具的选择原因

开发工具选择Eclipse,选择Eclipse的原因是其是免费开源的可扩展的IDE,可动态的安装不同开发插件。我们安装的android开发插件只是其中一种。它具有强大的插件加载能力,支持多种语言开发,可在多个系统上运行。 2.2.2Java介绍

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。 Java与传统的C,C++相比是纯面向对象的语言,它封装了容易造成错误的指针,同时避免了一些容易造成错误的运算符重载,多重继承等。与此同时Java语言具有内存回收机制能够自动回收不用的内存,避免C或C++比较容易造成的内存泄露问题。另一方面虽然Java语言的运行效率一直被人们所诟病,但是其强大的跨平台型,简单易用性,给予了其强大的活力。另一方面Android是第一款内置支持Java的操作系统,因此在移动互联网内的应用中,Java语言会扮演着一个重要的角色。

Java语言特点:

Java是一种简单、安全、容易适用、面向对象、可移置、高性能、多线程的语言。 简单性:Java语言简单高校,基本Java系统(编译器和解释器)所占空间不足250KB由于Java最初是为了对家用电器进行集成控制而设计的,因而具备简单命了的特征。 面向对象:面向对象技术是现代工业的一次革新,提高了软件的模块化程度和重复适用率,缩短了软件开发时间,减低了卡发成本。在Java之前虽然已经有面向对象的程序设计语言问问世,但有些如c++并不是完全的面向对象,而是面向过程和面向对象的混合体。Java则是完全面向对象的程序设计语言。

安全性:Java是可以用在网路及分布环境下的网路程序设计语言。在网路环境下,语言的安全性变得更为重要。Java提供了许多安全机制来保证其适用上的安全性。 平台独立:平台独立指程序不受操作平台的限制,可以应用在各种平台上。Java源程序经过编译后生成字节码文件,而字节码与具体的计算机无关。只要计算机安装了能解释执行字节码的Java虚拟机JVM,就可以执行字节码文件,从而实现Java的平台独立性。 多线程:Java具备内建的多线程功能,可以将一个程序的不同程序段设置为不同的线程,使各线程并发、独立执行,提高系统的运行效率。

网络功能:Java能从全球网络资源获取所需信息,如数据文件、影响文件、声音文件等,并对所得信息进行处理,所以说Java是一种网络语言。

执行效率:Java的字节码需要经过Java虚拟机JVM解释成机器码才能执行,所以速度上较慢。但是随着JVM技术的进步,使得其执行速度直逼C与C++。 2.2.3 Java语言的图形化编程

Java语言在图形化设计上一直存在短板,它不像我们学习C,C++时可以方便的借用VC 6.0,VS等开发工具借助MFC(微软基础类库)进行图形化的开发,而Pascal语言可以在Delphi下甚至比MFC更方便更快捷的进行图形化开发。Java语言的图形化界面设计: 1.基于Eclipse的插件swing/swt/Jface designer; 2.NetBeans; 3.传统的JBuilder; 4.Oracle的 Jdevelop;

5.IntelliJ IDEA Community Edition。 本文系统设计采用第一种方法

2.2.4 Java的Socket编程

Java做的比较成功的就是网络方面的应用,所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。套接字中包含网络通信发送的内容,socket是程序通讯之间的一端,可以发送请求,也可以接收请求。Java中的socket类提供了特定的方法:getInputStream 与getOutputStream。

getInputStream 与getOutputStream方法介绍:

getInputStream: 用于获得对应的网络连接的输入流,返回一个实际的IutputStream

对象,以便程序得到输入,进入对应的处理流程。

getOutputStream:用于发送一个对应的输出流,连接的另一端得到一个实际OutputStream对象,同样对应连接方得到输出流后,进入后续处理过程;getInputStream 与getOutputStream两种方法,共同完成了Java 基础的网络通信功能。

在Socket编程中类似的还包括UDP协议中的DatagramSocket , 以及涉及服务端功能的ServerSocket等等在实际使用时Java还需要用到DatagramPacket(就是我们所称作的数据报),数据报来完成DatagramSocket接收和发送的数据。

2.4设计目标

2.4.1基本性能

编写完成局域网简单的通信及文件传输软件,能够实现软件的顺利运行。 实用性:为局域网聊天提供方便,有效进行文件传输共享。

操作简单:本系统只需将jar包拷贝到pc上,只要pc安装了支持Java的运行环境即可运行,而且无需对软件进行安装,点击即可直接运行技术便捷,沟通快速:软件设计无需用户进行登录,打开自动识别用户机IP地址,同时可设置广播时段,刷新后显示在线用户列表,选择对应用户即可直接进行对话,或文件传输。

适应性:广泛适应普通的局域网环境,无论是小区还是学校宿舍,办公室,实验室,只要是统一局域网即可用软件进行直接便捷的沟通。

代码可读性好:软件设计采用功能区分,对应不同的类,并标注有注释,因此可读性良好。

2.4.2开发目标

1完成基本性能需求,设计出具备基本的用户界面,基本的设置界面,后台可见等软件特征;

2具备完善的聊天界面,文件传输界面; 3实现聊天功能模块; 4实现文件传输模块;

5实现对话提醒,对话完毕提醒;

6实现文件传输提醒,文件传输完毕提醒;

第三章 系统设计

3.1系统概要设计

3.1.1软件用例图

在同一个局域网内,根据不同的IP地址,PC段能够显示在线的PC用户列表;通过选定用户列表中的用户然后就可以进行文本信息的发送以及文件的传送;在文本信息和文件发送成功后都会有发送成功的提示;当有新PC端进入局域网后,可以通过刷新用户列表的方式会看到新的用户。具体系统用例图如图3-1所示:

图3-1系统用例图

图3-2

在局域网内的多台主机运行软件后,客户机之间可以相互通信,传输文件。主机通信协议 UDP中的数据报协议及socket通信协议。

3.1.2软件总体分析

在一个局域网内,用户与用户之间的聊天功能是可以多人之间同时进行的,他们之间的数据流图如图3-3所示:

图3-3 数据流图

在局域网内,

PC与PC之间互相之间既可以充当客户端的角色,同样可以充当服务器的角色。首先由客户端发出建立连接的请求,当服务器端收到连接请求后向客户端发出信息建立连接。建立连接后通过InputStream和OutputStream两个模块进行互相之间的通信,具体系统实现原理图如图3-4所示:

图3-4系统实现原理图

服务器端和客户端进行通信技术实现原理:

1、发送端Client向Server即接收端发送Socket连接请求,Server端建立服务端并监听Socket--->等待并接受连接请求--->接收请求后创建连接Socket;

2、连接创建后发送端和接收端即可开始通信; 3、结束通信后关闭Socket连接。

3.2系统模块功能实现

3.2.1 广播模块

BroadCast模块主要实现了数据报socket的局域网信息类型状态的反馈。其中字符op代表了各种消息类型。'S'代表'R'代表'M'代表'A'代表

该模块继承了Runnable方法,该模块主要使用DatagramSocket发送、接收数据,具体是利用DatagramSocket(int port, InetAddress laddr)方法:创建一个DatagramSocket实例,并将该对象绑定到指定IP地址、指定端口。 并利用send(DatagramPacket p):以该DatagramSocket对象 p 向外发送数据报。 部分关键代码如下:

public void run() {

}

String newStr = "";

if (op == 'S' || op == 'R' || op == 'M' || op == 'A') { } try { }

DatagramSocket clientSocket = new DatagramSocket(); byte data[] = newStr.getBytes("UTF-8");

DatagramPacket theOut = new DatagramPacket(data, data.length,

address, 2007);//初始化广播

clientSocket.send(theOut);//发出广播 clientSocket.close();//关闭Socket端口

JOptionPane.showMessageDialog(null, e.getMessage()

+ this.getClass().toString(), "错误", JOptionPane.ERROR_MESSAGE);

newStr += op;

newStr += mes;//判断广播类型

JOptionPane.showMessageDialog(null, "无该操作!", "错误",

JOptionPane.ERROR_MESSAGE);//报错处理

return;

} else {

} catch (Exception e) {

3.2.2 发送文件模块

Client模块实现客户端的消息及文件发送功能;

该模块同样继承了Runnable方法,该模块中定义了获取传输文件的方法public void getFiles(File file, String lastDir, String localPath)用于获取要传输的文件目录名称,及大小。模块中的run()方法,将getFiles获得的文件转化为相应的数据报流发送出去。并可以在相应主界面显示相应的发送状态,和发送进度显示。 部分关键代码如下:

public void getFiles(File file, String lastDir, String localPath) {

}

byte[] buffer = new byte[1024];

Socket sendSocket = new Socket(address, MainFrame.PORT);//初始化一个Socket套接字 DataInputStream in = new DataInputStream(

sendSocket.getInputStream()); sendSocket.getOutputStream(), 512);

BufferedOutputStream outb = new BufferedOutputStream( DataOutputStream out = new DataOutputStream(outb);

ObjectOutputStream oout = new ObjectOutputStream(out);//设置输出对象 oout.writeObject(fileVector); oout.flush();//刷新

ObjectInputStream oin = new ObjectInputStream(in); if (MainFrame.m.accRe) }

JOptionPane.showMessageDialog(null, "消息已发送到!", "提示",

JOptionPane.DEFAULT_OPTION);//获取到消息

if (file.isFile()) { }

totalSize += file.length();//获取文章的大小 添加路径

添加文件 lastDir = lastDir + "/" + file.getName(); String strs[] = file.list();

for (int i = 0; i

File newfile = new File(file.getAbsolutePath() + "/" + strs[i]); getFiles(newfile, lastDir, localPath);//获取文章以及保存文章的路径

} else if (file.isDirectory()) {

try {

for (int i = 0; i

File temp = (File) accVector.get(i); send += " " + temp.getName(); getFiles(temp, "", temp.getParent());

out.flush();

3.2.3 设置界面模块

ConfigFrame模块实现网段设置及导入功能,用于配置广播网段;

该模块调用MainFrame.getBNet(InetAddress.getLocalHost().getHostAddress())获取对应的本地IP地址,用于局域网通信网段设置。 部分关键代码如下:

void init() {

} catch (Exception e) {

System.out.println(e.toString());//打印报错的原因

}

void apply() {

try {

File file = new File("config.ini"); if (file.exists())

file.delete();//如果文件为空则删除该文件 file.createNewFile();//重新新建文件

RandomAccessFile rf = new RandomAccessFile(file, "rw"); for (int i = 0; i

rf.close();

String strIP = (String) model.get(i);

rf.writeBytes(strIP + "\r\n");//将局域网内其它主机信息保存到文件中

File file = new File("config.ini");//初始化一个配置文件 RandomAccessFile fout;

boolean isExist = file.exists(); try { }

if (!isExist) file.createNewFile();//如果没有该文件则新建一个文件 fout = new RandomAccessFile(file, "rw"); if (!isExist) { }

String strIP;//IP地址

while ((strIP = fout.readLine()) != null) { }

fout.close();

ex.printStackTrace();

model.addElement(strIP);//添加一个新主机的IP地址

String local = MainFrame.getBNet(InetAddress.getLocalHost()

.getHostAddress());

fout.writeChars(local + "\r\n");//把本机的主机信息写入文件

} catch (Exception ex) {

Apply()模块关键代码:

}

同时利用一个apply()方法用配置文件config.ini对网段地址进行初始化。配置文件如图3-6:

图3-6

3.2.4 文件数据导入模块

FileDrag模块继承TransferHandler此类用于处理往返Transferable 的传输。该 Transferable 用于表示通过往/返于剪贴板的剪切、复制或粘贴操作进行交换的数据。该模块利用了TransferHandle类的 importData和canImport构造方法向对应组建中导入数据,对应于文件选择传输时的操作。 importData关键代码:

public boolean importData(JComponent c, Transferable t) {

}

try { }

return false;

.getTransferData(DataFlavor.javaFileListFlavor);

添加文件界面 MainFrame.m.paintList();//添加一个控制面板到列表中 return true;

ufe.printStackTrace(); e.printStackTrace();

} catch (UnsupportedFlavorException ufe) { } catch (IOException e) {

canImport关键代码:

public boolean canImport(JComponent c, DataFlavor[] flavors) {

for (int i = 0; i

if (DataFlavor.javaFileListFlavor.equals(flavors[i])) { }

return true;//数据导入成功

}

return false;//数据导入失败

3.2.5监听模块

Listener模块用于服务端监听用于监听用户数状态,及文本消息,文件传输信息;它继承Thread类。该类中run()方法的while循环条件设置为true,实现消息的持续循环监听,从而获得在线用户数量,消息文件发送结果等状态监听。 关键代码如下:

recName.setLength(recData.length); JOptionPane.showMessageDialog(null,

this.getClass() + e.toString(), "错误", JOptionPane.DEFAULT_OPTION);

} catch (IOException e) {

try {

DatagramPacket recName = new DatagramPacket(recData, recData.length); DatagramSocket recSocket = new DatagramSocket(2007); while (true) {

try {

recSocket.receive(recName);

String data = new String(recName.getData(), 0,

recName.getLength(), "UTF-8");

String userName = data.substring(1); char flag = data.charAt(0); if (flag == 'S') {

MainFrame.detect('R', recName.getAddress(),

MainFrame.message);

MainFrame.m.addToTable(recName.getAddress(), userName); MainFrame.m.setCount("在线人数: "

+ MainFrame.m.tableModel.getRowCount());

} else if (flag == 'M') {

MainFrame.detect('A', recName.getAddress(), "return"); String msg = userName

.substring(userName.indexOf("|") + 1);

userName = userName.substring(0, userName.indexOf("|")); JOptionPane.showMessageDialog(null, msg, "来自"

+ userName + "的消息", JOptionPane.DEFAULT_OPTION); + recName.getAddress().getHostAddress() + ")的消息:" + msg);

MainFrame.append("log.txt", "来自" + userName + "("

} else if (flag == 'A' && MainFrame.m.accRe)

JOptionPane.showMessageDialog(null, "消息已发送到!", "提示",

JOptionPane.DEFAULT_OPTION);

}

}

JOptionPane.showMessageDialog(null, e.toString(), "错误",

JOptionPane.DEFAULT_OPTION); }

} catch (SocketException e) {

3.2.6充当服务端模块

Server充当服务端功能模块,用于对接受到的信息进行反馈。Server.java同样继承了Runnable类。作为服务端程序设计,利用ServerSocket类的构造函数ServerSocket(int port)创建一个ServerSocket类的对象,其中的参数port是用于指定的端口,本程序中的具体参数是MainFrame.PORT,即主程序中设置的具体端口。在代码中ServerSocket创建的具体实例用于接收连接请求。服务端程序(参见关键代码)用server.accept()知道创建连接并返回最近的一个最近创建的Socket即 “so”,“so”绑定了客户程序的IP地址以及对应的端口号。紧接着创建一个名为newThread的线程用于递归创建服务端连接(即前面所述),并对线程设置优先级以便不同线程能按监听相应的先后顺序执行。 关键代码如下:

try {

} try {

long count;

byte[] buffer = new byte[1024];

DataOutputStream out = new DataOutputStream(

mySocket.getOutputStream());//输出的套接字信息 mySocket.getInputStream(), 8192);

BufferedInputStream inb = new BufferedInputStream(

DataInputStream in = new DataInputStream(inb);//接受的套接字信息 ObjectInputStream oin = new ObjectInputStream(

mySocket.getInputStream());

mySocket.getOutputStream());//信息确认

ObjectOutputStream oout = new ObjectOutputStream(

ServerSocket server = new ServerSocket(MainFrame.PORT);//设置一个服务器套接字 while (true) { }

JOptionPane.showMessageDialog(null,

e.getMessage() + this.getClass(), "错误",JOptionPane.ERROR_MESSAGE);

Socket so = server.accept();//接受服务

Thread newThread = new Thread(new Server(false, so)); newThread.setPriority(6); newThread.start();

} catch (Exception e) {

} else {

configed = false;

fileSelect f = new fileSelect(fileVector, mySocket

.getLocalAddress().getHostName(), 2);

f.setLocationRelativeTo(null);//显示连接界面 f.setVisible(true); // receive file while (!f.closed) { Thread.currentThread();

Thread.sleep(300);//时间间隔设置

}

oout.writeObject(fileVector);// oout.flush(); f.dispose();

totalSize = in.readLong();//获取整个文件的大小 int rSize;

longif (totalSize > 0) { JFrame frame = new JFrame();

frame.setTitle("接收文件");//显示出接收文件界面 JLabel lable1 = new JLabel(); JLabel lable2 = new JLabel(); JLabel lable3 = new JLabel();

frame.add(lable1, "North");//添加一个标签在界面的上方 frame.add(lable3, "South");//添加一个标签在界面的下方

receivedSize = 0;//初始化接收到文件的大小为0 String Lmessage1 = "总共要接收: " + String.valueOf(totalSize / 1024) + " KB"; String Lmessage2 = "已接收: " + String.valueOf(receivedSize / 1024) + " KB "

+ "速度: 0";

String Lmessage3 = "正在接收文件:";

。。。。。。。(下面代码略)

第四章 软件界面设计与程序主模块实现

4.1界面设计

4.1.1界面布局

设置区域:包括,文件选择,刷新,发送选项,IP广播配置按钮,如图4-1所示。文件选择主要是在给对方放松文件时需要用到的功能界面,当点击文件按钮后就会弹出一个选择文件对话框,按照文件路径选择目标文件。帮助即是一些关于系统软件的一些说明。刷新功能主要用来刷新局域网内本机的信息以及局域网内的其它主机信息。发送主要实现的是和局域网内的其它客户端进行文本聊天功能。设置即是IP广播配置按钮,根据需要可以设定一个小范围的广播IP地址。

图4-1界面布局图

4.1.2用户区域

显示在线的PC用户列表,用户名称为PC名,如图4-2所示。当用户需要向对方发送文件和文本信息时,需要在这个界面上选择对应的客户端用户然后进行文件的送饭和文本信息的发送。在用户进入局域网时最好将自己的主机名和用户名进行重命名,不然就会使用IP地址进行代替,这样不利于分清对应的客户端。

图4-2局域网用户显示界面

4.1.3聊天区域

聊天区域文本框,如图4-3所示。该功能区主要是局域网内客户端之间进行文本信息交流的主要区域,类似于QQ聊天窗口的简单版本。

图4-3 聊天区域

4.2主模块与功能模块的组织实现

4.2.1 主程序运行界面

如图4-4所示,问系统软件的主要功能界面。为了进行系统测试,然后在用户列表区域选择自己主机发送一条文本信息“Maybe 廖兵,四川大学锦江学院”,发送之后就会出现如图4-4一个对话框。

图4-4 系统主界面

该模块的实现主要是通过MainFrame模块是程序的主框架。该模块充当程序的主要支撑。该模块继承了JFrame类。JFrame类是一个容器类,用于添加程序的各种组件,从而实现程序运行的界面。 4.2.2 MainFrame.java组成

在MainFrame中首先声明定义了各种界面用到的组建,及共有数据域参数: 例如:

public DefaultTableModel tableModel = new DefaultTableModel(

new Object[][] {}, new String[] { "主机名", "用户名", "ip地址" });

这个声明是声明定义一个默认表格模型用于显示用户列表,对应界面如图4-5所示。 参数类型Vector为对应自动增长的对象数组:fileVector为局域网传输显示对应文件的列表;sendingFile为传送文件进度列表;BCIP为广播的IP地址列表。其他类型参数如JFrame,JTable,JPanel,JButton对应各种界面组建。参数

message,nearIP,PORT分别为定义的String类型的消息,IP地址,服务端口。

图4-5 用户列表图

Run()方法中的关键代码段:

try {

byte[] buffer = new byte[1024];

Socket sendSocket = new Socket(address, MainFrame.PORT);//初始化一个Socket套接字 DataInputStream in = new DataInputStream(

sendSocket.getInputStream());

sendSocket.getOutputStream(), 512);//设置存储数据的大小

BufferedOutputStream outb = new BufferedOutputStream( DataOutputStream out = new DataOutputStream(outb);

ObjectOutputStream oout = new ObjectOutputStream(out);//设置输出对象 oout.writeObject(fileVector); oout.flush();//刷新

ObjectInputStream oin = new ObjectInputStream(in); if (MainFrame.m.accRe) }

JOptionPane.showMessageDialog(null, "消息已发送到!", "提示",

JOptionPane.DEFAULT_OPTION);//获取到消息

for (int i = 0; i

File temp = (File) accVector.get(i);//获取到文件 send += " " + temp.getName();//发送的文件名称 getFiles(temp, "", temp.getParent());

主程序的run()方法中首先判断端口是否被占用(用!isOnly()来判断 )然后调用Listener模块功能进行在线用户的监听,及相关信息传递情况,紧接着启用一个Server(工程模块解说参见3.2.6)线程用于创建ServerSocket连接进行消息文件传递.方法detect()中调用BroadCast模块(见3.2.1)来获取客户端的相关信息。在start()方法中调用detect的获取的对应消息类型进行初始化在线人数,本地ip地址段等,本功能是通过局域网广播来实现的。

try {

IntAddress sendAddress; String strIP;//设置IP字符串

for (int i = 0; i

strIP = (String) BCIP.get(i); int type = getIPType(strIP); if (type == 1) { }

sendAddress = InetAddress.getByName(strIP);//通过IP地址获取局域网在线用户 detect('S', sendAddress, message);//发送消息 strIP = strIP.substring(0, strIP.length() - 1); for (int ip = 2; ip

detect('S',

InetAddress.getByName(strIP

+ String.valueOf(ip)), message);

} else if (type == 2) {

} else if (type == 3) {

strIP = strIP.substring(0, strIP.length() - 3);

for (int ip = 1; ip

for (int j = 2; j

detect('S',

InetAddress.getByName(strIP

+ String.valueOf(ip) + "."

+ String.valueOf(j)), message);//找到相应的主机后

//发送信息

} catch (Exception e) {

}

JOptionPane.showMessageDialog(null, e.getMessage(), "错误",

JOptionPane.ERROR_MESSAGE);

主模块的send()方法完成了用户消息及文件发送功能,其调用了detect()方法及通过建立线程,启用Client模功能(见3.2.2)。这样通过主模块的有效组织方式,将不同功能块之间有机的组织在一起完成了本软件设计目标的基本功能。

第五章 软件调试与测试

5.1获取用户ip功能测试

在局域网内打开两台pc,在这两台pc上各打开本软件,由于打开软件有先后顺序,可能只显示一台pc,打开配置文件进行对应设置,点击刷新,即显示如下界面(图5-2):识别用户成功。如果局域网内有多个PC客户端,那么最后将本机的主机名改成大家都熟悉和认识的名称,以便于后面选择对应的用户进行文本信息的发送以及文件的传送。

图5-1 获取在线用户列表

5.2发送文本消息模块测试

首先从一个客户端进行测试,发送一条“你好啊,这是飞鸽传书测试”的文本信息给另外一个客户端,在另外一个客户端就会显示出如图5-2所示的效果。以下图片分别是两个用户之间进行文本消息对话的截图,测试软件运行成功,达到预期效果。

图5-2 文本信息测试对话框

为了让两个客户端进行文本交流,双方都为对方发送文本信息,如图5-3是Apple—lab的pc发送来的消息,消息内容为“你好啊,我向你发送信息了”,此时还只是在文本编辑阶段,并没有将文本信息发送出去,如果用户在文本编辑区编辑完消息后即可发送该文本信息。

图5-3 文本编辑框

当Apple-lab用户向daomen用户发送文本信息成功后,在Daomen PC端就会出现Apple-lab用户开始发送的信息。接收到信息的效果如图如图5-4所示是Daomen PC向Apple-lab发送信息的截图。

图5-4 文本信息接收窗口

通过系统设计可知,在服务器与客户端建立连接以及发送文本信息后,都会得到一个消息反馈,反馈所发送的信息是否成功,如图5-5所示即是文本信息发送成功后的消息反馈对话框。该图说明了文本信息已经成功发送给对方,同时证明了本系统软件在文本信息发送的功能得到了实现。

图5-5消息发送成功后的反馈对话框

5.3文件传输模块测试

本系统软件的另外一个重要功能即是文件的传送,由于是局域网进行P2P的数据传送,速度会很快。首先通过Apple-lab客户端向daomen客户端发送一个压缩包文件,通过文件路径对话框的选择,选择好对应的压缩包文件后进行发送,发送的文件名为test.zip,发送后在Daomen端就会显示将要接收的文件,在Daomen端点击接收该文件后直到传送成功。发送文件和成功接受到文件的效果图如图5-6和图5-7所示。

图5-6 接收文件对话框

图5-7 文件发送完毕对话框

为了测试文件的多样性,再次发送多个PDF文件进行测试,当同时发送多个文件时,在界面上会显示出每一个文件的传送进度,总共要发送的文件大小以及在发送过程中的传输速度,在选择发送文件或者整个文件夹时选择进行文件选择对话框,对应的效果图如图5-8和图5-9所示:

图5-8 发送文件进度效果图

选择文件后显示的界面,如图5-9:

图5-9 选择文件对话框

5.4设置模块测试

点击界面设置按钮,弹出如下界面(图5-11),在本界面可设置广播的网段,可设置一个计算机IP地址,也可设置整个局域网IP网段,设置后,点击刷新即可显示所以在网段内在线的用户:

图5-11 服务设置

从以上测试中,软件基本达到预期设计目标,软件功能实现基本成功完成,没有检测出明显的错误。到此软件阶段完成,可以投入试使用阶段。

第六章 总结

在本次制作毕业设计过程中,遇到过很多困难,在导师和同学们的帮助下,最终完成了这次毕业设计。本人针对网络通信进行了深入的学习和网络编程实践,认真对局域网飞鸽传书系统进行了分析与设计,并最后通过JAVA语言进行了实现。所做的主要工作有: 对整个系统进行设计;

基本学会了网络通信编程,主要是SOCKEAT编程;

熟练的使用JAVA语言进行界面布局;

解读了一部分开源的通信代码;

虽然本次毕业设计完成了局域网飞鸽传书的基本功能,但在测试的时候还不是很稳定,特别是在传输数据量大的文件时。本人一定会在以后的学习和生活中更深层次的去学习和研究。

参考文献

[1] 孟凡荣.数据库原理与应用.中国矿业大学,2009(8)28-30

[2] 张虹.软件工程与软件开发工具.清华大学出版社.2009(1)55-75

[3] Bruce Eckel.Thinking in Java.机械工业出版社.2009(6)42-64

[4] 罗军舟等. TCP/IP协议及网络编程技术.清华大学出版社.2008(10)

[5] 孙一林,彭波.Java网络编程实例.清华大学出版社.2003(4)

[6] 李树青.Java通用范例开发金典.电子工业出版社.2009

[7] 王鹏.Java Swing 图形界面开发与案例详解.清华大学出版社.2008

[8] 庞永庆,翟鹏.Java完全自学宝典.清华大学出版社.2008

[9] 刘永华,于春花.Java网络编程.清华大学出版社.2008

[10] Boost Documentation,http://www.boost.org 或 http://boost.sourceforge.net

[11] Boost.Asio Documentation,http://asio.sourceforge.net

[12] 孙桂兰.电子商务网上书店系统.北京:人民邮电出版社,2004

[13] Jalote P.Optimum control limits for employing statistical process control in software

process. IEEE Trans on Software Engineering,2002,28(12)

[14] 萨师煊,王珊.数据库系统概述.第三版.北京:高等教育出版社,2004.

[15] B. Ford, M.I.T., P. Srisuresh, etc. Peer-to-Peer (P2P) communication across middleboxes. http://midcom-p2p.sourceforge.net/draft-ford-midcom-p2p-01.txt 2004

[16] 飞思科技产品研发中心. Java 2应用开发指南[J]. 北京:电子工业出版社, 2002

[17] 薛为民, 夏文红, 解仑.Java应用教程 北京:北京交通大学出版社 2005 [18] http://java.sun.com [19] http://www.microjava.com/

[20] http://www.csdn.net/

[21] Cay s.Horstmann ,Gary Cornell JAVA核心技术. 北京:机械工业出版社,2008

附录

其他其他部分相关代码:

fileSelect:

public classextends javax.swing.JFrame

{

/** Creates new form fileSelect */

public DefaultTableModel tableModel;

publicfileVector;// = new Vector();

public boolean closed =false ;

private int style = 2;

private String user = "";

publicint style)

{

//fileVector.addAll ( v );

this.style = style ;

this.user = user;

fileVector = v;

initComponents ();

tableModel = new DefaultTableModel (

new Object[][]{},

new String []{

"文件名" , "大小" , "用户"

}

);

if ( style == 1)

{

this.setTitle ( "准备发送的文件列表");

tableModel.setColumnIdentifiers (new String []{

"文件名" , "大小" , "位置"

});

}

jTable1.setModel ( tableModel );

if ( style == 2 )

{

this .setTitle ( user + "发送给你的文件");

jButton3.setVisible ( false );

}

updateTable();

}

/** This method is called from within the constructor to

* initialize the form.

* WARNING: Do NOT modify this code. The content of this method is

* always regenerated by the Form Editor.

*/

生成的代码 ">//GEN-BEGIN:initComponents private void initComponents()

{

jScrollPane1 = new javax.swing.JScrollPane();

jTable1 = new javax.swing.JTable();

jLabel1 = new javax.swing.JLabel();

jButton1 = new javax.swing.JButton();

jButton2 = new javax.swing.JButton();

jButton3 = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);

setTitle("\u63a5\u6536\u6587\u4ef6");

addWindowListener(new java.awt.event.WindowAdapter()

{

public void windowClosing(java.awt.event.WindowEvent evt)

{

formWindowClosing(evt);

}

});

jTable1.setModel(new javax.swing.table.DefaultTableModel(

new Object [][]

{

{null, null, null, null},

{null, null, null, null},

{null, null, null, null},

{null, null, null, null}

},

new String []

{

"Title 1", "Title 2", "Title 3", "Title 4"

}

));

jScrollPane1.setViewportView(jTable1);

jLabel1.setText("\u5c06\u8981\u63a5\u6536\u7684\u6587\u4ef6:");

jButton1.setText("\u5220\u9664");

jButton1.addActionListener(new java.awt.event.ActionListener()

{

public void actionPerformed(java.awt.event.ActionEvent evt)

{

jButton1ActionPerformed(evt);

}

});

致谢

本文讨论了如何利用JAVA技术开发局域网的飞鸽传书类软件,基本实现了软件初期设计目标,使用户在局域网内可以便捷的完成信息交互,文件传输。

在当今电脑网络密布的世界当中,一个简单高效的局域网通信工具是如此的具有实用性,所以我们应当重视对它的相关研究与开发。在这次的毕业设计中,我应用了JAVA开发工具在WINDOWS平台上开发了一个基于WINDOWS平台的局域网通信工具,在这一重要的领域进行了相关的实践,不管是对我的研究能力,还是实际动手能力,还是资料查阅能力,都起了相当大的益处。所以,我决定认真总结这次毕业设计的经验,以及学习到的知识,来更加的充实自己的头脑和完善自己的知识结构。 系统着重研究并实现了网络应用的部分。根据实现的情况看,具有较友好的聊天界面生成效果,以及流畅的网络通信效果。生成的聊天室可以达到基本的聊天要求,具有较高的研究价值。

几个月的忙碌和工作,本次毕业设计已经接近尾声,作为一个川大锦江学院的的毕业设计,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有导师的督促指导,以及一起工作的同学们的支持,想要完成这个设计是难以想象的。在这里再次感谢我的导师,及给予我帮助的同学们。

通过毕业设计,发现自己在理论研究和实际工作能力等方面都得到了提高,受益匪浅,同时在老师的指导和课题组同学的共同帮助下,及时总结研究成果,这些无疑会对我今后的工作和学习带来很大的帮助。

进入社会后,我以后会更加努力,是学校给我学习的机会,在以后的生活中继续提高自己,为自己创造更多的机会,更好的明天!最后我要感谢我的指导老师,感谢四川大学锦江学院计算机学院对我的培养。

毕业论文(设计)

题 目 基于Java的局域网飞鸽传书软件设计与实现

系 部 计算机科学与工程系

专 业 计算机科学与技术 年级 2009

学生姓名

学 号

指导教师

基于Java的局域网飞鸽传书软件设计与实现

计算机科学与技术

学生 指导教师

【摘要】 随着移动互联网的时代已经来临,社交应用广泛存在,这些应用加强了人与人之间的沟通;从小环境来说比如校园网,以及部分局域网在内的的各种交互也广泛存在。局域网之间的信息交互,并不一定要建立在互联网的基础上,本设计就是针对局域网这一环境,旨在通过设计基于Java程序设计语言的一个局域网内能够相互通信,和传输文件的软件,来增强自我实践能力,及了解通信软件的设计技术。

本设计是用Java语言编写的类飞鸽传书软件,可以实现简单的局域网内的主机之间的信息发送,以及文件的传输,实现较简单快速,主要采用了UDP中的数据报协议,Socket协议实现主机之间的通信。

【关键词】局域网 通信 传输 文件

IP Messenger-software design and implementation used in LAN

based on Java

【Abstract】As the age of mobile and Internet is coming , social applications is widespread, and these applications enhance communication between people at the same time; On the side from the environment, such as campus network, as well as the various interactions, including the part of the LAN is also widespread. Internet for information exchange between the LAN is not necessary, this design is for the local area network designed to communicate with each other within a local area network based on the Java programming language through this design, and transfer files software to enhance the ability of self-practice,and understanding of communications software design techniques.

The design,which included in the IP Messenger software is written in Java , can send information and make file transfers between the host. It is simple and fast, mainly uses the Matagorda Protocol UDP, Socket protocol communication between hosts.

【Keywords】LAN,Communication, transmission File

目录

第一章 绪论 ................................................................. 5

1.1研究现状 ............................................................ 5

1.2主要研究内容 ........................................................ 5

1.3论文结构 ............................................................ 6

第二章 需求分析及技术介绍 ................................................... 7

2.1软件运行环境及开发环境 .............................................. 7

2.1.1开发环境配置 .................................................. 7

2.2相关技术介绍 ....................................................... 10

2.2.1Eclipse开发工具的选择原因 .................................... 10

2.2.2Java介绍 ..................................................... 10

2.2.3 Java语言的图形化编程 ........................................ 11

2.2.4 Java的Socket编程 ........................................... 12

2.4设计目标 ........................................................... 12

2.4.1基本性能 ..................................................... 12

2.4.2开发目标 ..................................................... 12

第三章 系统设计 ............................................................ 13

3.1系统概要设计 ....................................................... 13

3.1.1软件用例图 ................................................... 13

3.1.2软件总体分析 ................................................. 14

3.2系统模块功能实现 ................................................... 15

3.2.1 广播模块 ..................................................... 15

3.2.2 发送文件模块 ................................................. 16

3.2.3 设置界面模块 ................................................. 17

3.2.4 文件数据导入模块 ............................................. 18

3.2.5监听模块 ..................................................... 19

3.2.6充当服务端模块 ............................................... 20

第四章 软件界面设计与程序主模块实现 ........................................ 22

4.1界面设计 ........................................................... 22

4.1.1界面布局 ..................................................... 22

4.1.2用户区域 ..................................................... 22

4.1.3聊天区域 ..................................................... 22

4.2主模块与功能模块的组织实现 ......................................... 23

4.2.1 主程序运行界面 ............................................... 23

4.2.2 MainFrame.java组成 .......................................... 24

第五章 软件调试与测试 ...................................................... 26

5.1获取用户ip功能测试 ................................................ 26

5.2发送文本消息模块测试 ............................................... 27

5.3文件传输模块测试 ................................................... 28

5.4设置模块测试 ....................................................... 30

第六章 总结 ................................................................ 31

参考文献 ................................................................... 32

附录 ....................................................................... 33

致谢 ....................................................................... 35

第一章 绪论

1.1研究现状

移动互联网背景下,通讯软件各种各样,通讯软件在各行各业中广泛应用,对于人与人之间的通信交流加强了人们沟通,局域网内的文件传输也促进了资源共享的便利;目前比较流行的通讯软件类别是即时通讯软件。

对目前市场上的即时通讯软件产品进行分析,可以发现, 这些软件除具备实时交谈和互传信息等功能外, 同时集成了数据交换、语音聊天、视频会议、电子邮件管理等功能。目前, 即时通讯软件正在积极向移动领域扩展, 努力增强其跨越平台的能力, 最大限度的实现互联网服务向移动领域的迁移。这使得即时通讯软件不仅是注重通讯功能的联系软件, 也是成为注重个人通讯录管理功能的移动设备管理系统。两者集成在一起变成一个集成通讯录、手机消息、即时通讯的个人沟通平台。另外, 即时通讯软件的协作工作和与其它软件整合的功能也在逐渐增加。近年来即时通讯产业正在移动领域努力推动它的应用, 例如将即时通讯嵌入移动终端系统之中, 并且可以实现与互联网同样功能的服务。

目前流行的通讯软件也叫做社交网络通讯软件,典型代表是腾讯公司的QQ,其服务器客户端模型如下图:

图1-1 服务器客户端模型图

1.2主要研究内容

本设计研究局域网下的简单的通讯软件,主要包括简单的PC用户之间的相互通信,相互之间能接收信息。局域网内能相互之间实现简单的文件共享传输。同时通过本设计了

解及掌握Java基本的网络通信方式,了解具体Java Socket的具体用法,实现局域网之间的通信传输。

本设计的最终目的是设计一个具有下列功能的软件,软件最终所实现的基本功能如下: 1:局域网内自动主机识别,即不需要手动添加主机;

2:实现局域网pc用户之间的文本消息发送;

3:实现局域网pc用户文件的传输;

4:简单的服务配置设置;

1.3论文结构

本论文分为六个章节,具体详细结构如下:

第一章:主要讲述论文的研究背景现状,本论文研究内容,及论文结构

第二章: 软件设计的需求分析,技术介绍,包括:运行环境,环境配置,相关涉及技术,及设计需求,目标等

第三章:软件的概要设计

第四章:软件的模块详细设计与实现

第五章:软件调试与测试

第六章:总结

参考文献与致谢

第二章 需求分析及技术介绍

2.1软件运行环境及开发环境

本系统的运行环境:操作系统:Windows 7旗舰版

PC硬件版本:制造商:lenovo;型号:lenovo Win7 PC;分级:3.4 Windows 体验指数;处理器:Intel(R)Core(TM)2 Duo CPU T5550 @1.83GHz 1.83GHz;安装内存(RAM):2.00 GB;系统类型:32位操作系统笔和触摸:没有可用于此显示器的笔或触控输入Lenovo 支持网站:联机支持

本系统开发环境:Java JDK 1.6;Eclipse Version: Indigo Release,Build id: 20110615-0604。

2.1.1开发环境配置

软件开发环境JDK配置:

JDK的是Java Development Kit的缩写,他是java开发的工具包,对于javaWeb开发必不可少。它包含Java运行环境即JRE,和java运行的基础类库,java工具包。在做相应开发之前,我们必须把java相应环境搭建好。

开发环境配置流程:

第一步,打开oracle公司网站主页:

http://www.oracle.com/technetwork/java/index.html(这里我们注意到sun公司已经被Oracle公司收购了所以,我们下载的时候打开的网页已经是Oracle公司的网页了,当然下载是免费的)。

第二步,在网页右侧位置点击 Java SE链接然后进行下载;

第三步,点击相应位置即上图Java SE处然后再点击相应页面的Download JDK 点击下载即可。

图2-1

第四步,下载完成后,双击安装

图2-2

点击 接受 按钮

图2-3

安装在默认目录即可

图2-4

安装过程可能会出现防火墙软件或别的杀毒软件警告,一律点允许即可。安装完成后需设置相应的环境变量。

安装完成后都需要设置三个环境变量:他们分别是PATH,JAVA_HOME, 和 CLASSPATH(不区分大小写):

JAVA_HOME:填写我们把JDK所安装的位置)

PATH:指向上面我们填写的jdk安装目录\bin

CLASSPATH:指向java程序的类路径

在桌面上点击“我的电脑”处右键—>属性,选择“高级”选项即可找到相应环境变量进行配置。这样,系统环境变量就设置好后,按下面的步骤即可检测是否配置成功。 测试是否安装成功的步凑:

第一步,打开DOS运行界面即输入CMD弹出dos界面

第二步,输入java后稍等几秒会输出如下图界面

图2-5

在输入javac测试会输出如下图所示

图2-6

如果出现图2-6所示的界面则安装配置JDK环境成功。

第三步,编写一个简单的java源程序测试。

源文件为Test.java。内容如下

public class Test {

public static voTopicId main(String args[]) {

System.out.println("This is a test program."); } }

用CD命令进入文件所在的根目录。输入 Test.java 命令编译该程序。编译成功后,可以看到多了一个后缀为".class"的文件。继续在命令行输入 java Test 命令,执行程序,程序输出的 “This is a test program.”字样。

Java的环境配置完成后开始Eclipse下载解压到相应路径,然后进行打开Eclipse安装WindowBuilder_Pro插件以便使用使用SWT_Designer进行图形化的界面设计。

2.2相关技术介绍

2.2.1Eclipse开发工具的选择原因

开发工具选择Eclipse,选择Eclipse的原因是其是免费开源的可扩展的IDE,可动态的安装不同开发插件。我们安装的android开发插件只是其中一种。它具有强大的插件加载能力,支持多种语言开发,可在多个系统上运行。 2.2.2Java介绍

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。 Java与传统的C,C++相比是纯面向对象的语言,它封装了容易造成错误的指针,同时避免了一些容易造成错误的运算符重载,多重继承等。与此同时Java语言具有内存回收机制能够自动回收不用的内存,避免C或C++比较容易造成的内存泄露问题。另一方面虽然Java语言的运行效率一直被人们所诟病,但是其强大的跨平台型,简单易用性,给予了其强大的活力。另一方面Android是第一款内置支持Java的操作系统,因此在移动互联网内的应用中,Java语言会扮演着一个重要的角色。

Java语言特点:

Java是一种简单、安全、容易适用、面向对象、可移置、高性能、多线程的语言。 简单性:Java语言简单高校,基本Java系统(编译器和解释器)所占空间不足250KB由于Java最初是为了对家用电器进行集成控制而设计的,因而具备简单命了的特征。 面向对象:面向对象技术是现代工业的一次革新,提高了软件的模块化程度和重复适用率,缩短了软件开发时间,减低了卡发成本。在Java之前虽然已经有面向对象的程序设计语言问问世,但有些如c++并不是完全的面向对象,而是面向过程和面向对象的混合体。Java则是完全面向对象的程序设计语言。

安全性:Java是可以用在网路及分布环境下的网路程序设计语言。在网路环境下,语言的安全性变得更为重要。Java提供了许多安全机制来保证其适用上的安全性。 平台独立:平台独立指程序不受操作平台的限制,可以应用在各种平台上。Java源程序经过编译后生成字节码文件,而字节码与具体的计算机无关。只要计算机安装了能解释执行字节码的Java虚拟机JVM,就可以执行字节码文件,从而实现Java的平台独立性。 多线程:Java具备内建的多线程功能,可以将一个程序的不同程序段设置为不同的线程,使各线程并发、独立执行,提高系统的运行效率。

网络功能:Java能从全球网络资源获取所需信息,如数据文件、影响文件、声音文件等,并对所得信息进行处理,所以说Java是一种网络语言。

执行效率:Java的字节码需要经过Java虚拟机JVM解释成机器码才能执行,所以速度上较慢。但是随着JVM技术的进步,使得其执行速度直逼C与C++。 2.2.3 Java语言的图形化编程

Java语言在图形化设计上一直存在短板,它不像我们学习C,C++时可以方便的借用VC 6.0,VS等开发工具借助MFC(微软基础类库)进行图形化的开发,而Pascal语言可以在Delphi下甚至比MFC更方便更快捷的进行图形化开发。Java语言的图形化界面设计: 1.基于Eclipse的插件swing/swt/Jface designer; 2.NetBeans; 3.传统的JBuilder; 4.Oracle的 Jdevelop;

5.IntelliJ IDEA Community Edition。 本文系统设计采用第一种方法

2.2.4 Java的Socket编程

Java做的比较成功的就是网络方面的应用,所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。套接字中包含网络通信发送的内容,socket是程序通讯之间的一端,可以发送请求,也可以接收请求。Java中的socket类提供了特定的方法:getInputStream 与getOutputStream。

getInputStream 与getOutputStream方法介绍:

getInputStream: 用于获得对应的网络连接的输入流,返回一个实际的IutputStream

对象,以便程序得到输入,进入对应的处理流程。

getOutputStream:用于发送一个对应的输出流,连接的另一端得到一个实际OutputStream对象,同样对应连接方得到输出流后,进入后续处理过程;getInputStream 与getOutputStream两种方法,共同完成了Java 基础的网络通信功能。

在Socket编程中类似的还包括UDP协议中的DatagramSocket , 以及涉及服务端功能的ServerSocket等等在实际使用时Java还需要用到DatagramPacket(就是我们所称作的数据报),数据报来完成DatagramSocket接收和发送的数据。

2.4设计目标

2.4.1基本性能

编写完成局域网简单的通信及文件传输软件,能够实现软件的顺利运行。 实用性:为局域网聊天提供方便,有效进行文件传输共享。

操作简单:本系统只需将jar包拷贝到pc上,只要pc安装了支持Java的运行环境即可运行,而且无需对软件进行安装,点击即可直接运行技术便捷,沟通快速:软件设计无需用户进行登录,打开自动识别用户机IP地址,同时可设置广播时段,刷新后显示在线用户列表,选择对应用户即可直接进行对话,或文件传输。

适应性:广泛适应普通的局域网环境,无论是小区还是学校宿舍,办公室,实验室,只要是统一局域网即可用软件进行直接便捷的沟通。

代码可读性好:软件设计采用功能区分,对应不同的类,并标注有注释,因此可读性良好。

2.4.2开发目标

1完成基本性能需求,设计出具备基本的用户界面,基本的设置界面,后台可见等软件特征;

2具备完善的聊天界面,文件传输界面; 3实现聊天功能模块; 4实现文件传输模块;

5实现对话提醒,对话完毕提醒;

6实现文件传输提醒,文件传输完毕提醒;

第三章 系统设计

3.1系统概要设计

3.1.1软件用例图

在同一个局域网内,根据不同的IP地址,PC段能够显示在线的PC用户列表;通过选定用户列表中的用户然后就可以进行文本信息的发送以及文件的传送;在文本信息和文件发送成功后都会有发送成功的提示;当有新PC端进入局域网后,可以通过刷新用户列表的方式会看到新的用户。具体系统用例图如图3-1所示:

图3-1系统用例图

图3-2

在局域网内的多台主机运行软件后,客户机之间可以相互通信,传输文件。主机通信协议 UDP中的数据报协议及socket通信协议。

3.1.2软件总体分析

在一个局域网内,用户与用户之间的聊天功能是可以多人之间同时进行的,他们之间的数据流图如图3-3所示:

图3-3 数据流图

在局域网内,

PC与PC之间互相之间既可以充当客户端的角色,同样可以充当服务器的角色。首先由客户端发出建立连接的请求,当服务器端收到连接请求后向客户端发出信息建立连接。建立连接后通过InputStream和OutputStream两个模块进行互相之间的通信,具体系统实现原理图如图3-4所示:

图3-4系统实现原理图

服务器端和客户端进行通信技术实现原理:

1、发送端Client向Server即接收端发送Socket连接请求,Server端建立服务端并监听Socket--->等待并接受连接请求--->接收请求后创建连接Socket;

2、连接创建后发送端和接收端即可开始通信; 3、结束通信后关闭Socket连接。

3.2系统模块功能实现

3.2.1 广播模块

BroadCast模块主要实现了数据报socket的局域网信息类型状态的反馈。其中字符op代表了各种消息类型。'S'代表'R'代表'M'代表'A'代表

该模块继承了Runnable方法,该模块主要使用DatagramSocket发送、接收数据,具体是利用DatagramSocket(int port, InetAddress laddr)方法:创建一个DatagramSocket实例,并将该对象绑定到指定IP地址、指定端口。 并利用send(DatagramPacket p):以该DatagramSocket对象 p 向外发送数据报。 部分关键代码如下:

public void run() {

}

String newStr = "";

if (op == 'S' || op == 'R' || op == 'M' || op == 'A') { } try { }

DatagramSocket clientSocket = new DatagramSocket(); byte data[] = newStr.getBytes("UTF-8");

DatagramPacket theOut = new DatagramPacket(data, data.length,

address, 2007);//初始化广播

clientSocket.send(theOut);//发出广播 clientSocket.close();//关闭Socket端口

JOptionPane.showMessageDialog(null, e.getMessage()

+ this.getClass().toString(), "错误", JOptionPane.ERROR_MESSAGE);

newStr += op;

newStr += mes;//判断广播类型

JOptionPane.showMessageDialog(null, "无该操作!", "错误",

JOptionPane.ERROR_MESSAGE);//报错处理

return;

} else {

} catch (Exception e) {

3.2.2 发送文件模块

Client模块实现客户端的消息及文件发送功能;

该模块同样继承了Runnable方法,该模块中定义了获取传输文件的方法public void getFiles(File file, String lastDir, String localPath)用于获取要传输的文件目录名称,及大小。模块中的run()方法,将getFiles获得的文件转化为相应的数据报流发送出去。并可以在相应主界面显示相应的发送状态,和发送进度显示。 部分关键代码如下:

public void getFiles(File file, String lastDir, String localPath) {

}

byte[] buffer = new byte[1024];

Socket sendSocket = new Socket(address, MainFrame.PORT);//初始化一个Socket套接字 DataInputStream in = new DataInputStream(

sendSocket.getInputStream()); sendSocket.getOutputStream(), 512);

BufferedOutputStream outb = new BufferedOutputStream( DataOutputStream out = new DataOutputStream(outb);

ObjectOutputStream oout = new ObjectOutputStream(out);//设置输出对象 oout.writeObject(fileVector); oout.flush();//刷新

ObjectInputStream oin = new ObjectInputStream(in); if (MainFrame.m.accRe) }

JOptionPane.showMessageDialog(null, "消息已发送到!", "提示",

JOptionPane.DEFAULT_OPTION);//获取到消息

if (file.isFile()) { }

totalSize += file.length();//获取文章的大小 添加路径

添加文件 lastDir = lastDir + "/" + file.getName(); String strs[] = file.list();

for (int i = 0; i

File newfile = new File(file.getAbsolutePath() + "/" + strs[i]); getFiles(newfile, lastDir, localPath);//获取文章以及保存文章的路径

} else if (file.isDirectory()) {

try {

for (int i = 0; i

File temp = (File) accVector.get(i); send += " " + temp.getName(); getFiles(temp, "", temp.getParent());

out.flush();

3.2.3 设置界面模块

ConfigFrame模块实现网段设置及导入功能,用于配置广播网段;

该模块调用MainFrame.getBNet(InetAddress.getLocalHost().getHostAddress())获取对应的本地IP地址,用于局域网通信网段设置。 部分关键代码如下:

void init() {

} catch (Exception e) {

System.out.println(e.toString());//打印报错的原因

}

void apply() {

try {

File file = new File("config.ini"); if (file.exists())

file.delete();//如果文件为空则删除该文件 file.createNewFile();//重新新建文件

RandomAccessFile rf = new RandomAccessFile(file, "rw"); for (int i = 0; i

rf.close();

String strIP = (String) model.get(i);

rf.writeBytes(strIP + "\r\n");//将局域网内其它主机信息保存到文件中

File file = new File("config.ini");//初始化一个配置文件 RandomAccessFile fout;

boolean isExist = file.exists(); try { }

if (!isExist) file.createNewFile();//如果没有该文件则新建一个文件 fout = new RandomAccessFile(file, "rw"); if (!isExist) { }

String strIP;//IP地址

while ((strIP = fout.readLine()) != null) { }

fout.close();

ex.printStackTrace();

model.addElement(strIP);//添加一个新主机的IP地址

String local = MainFrame.getBNet(InetAddress.getLocalHost()

.getHostAddress());

fout.writeChars(local + "\r\n");//把本机的主机信息写入文件

} catch (Exception ex) {

Apply()模块关键代码:

}

同时利用一个apply()方法用配置文件config.ini对网段地址进行初始化。配置文件如图3-6:

图3-6

3.2.4 文件数据导入模块

FileDrag模块继承TransferHandler此类用于处理往返Transferable 的传输。该 Transferable 用于表示通过往/返于剪贴板的剪切、复制或粘贴操作进行交换的数据。该模块利用了TransferHandle类的 importData和canImport构造方法向对应组建中导入数据,对应于文件选择传输时的操作。 importData关键代码:

public boolean importData(JComponent c, Transferable t) {

}

try { }

return false;

.getTransferData(DataFlavor.javaFileListFlavor);

添加文件界面 MainFrame.m.paintList();//添加一个控制面板到列表中 return true;

ufe.printStackTrace(); e.printStackTrace();

} catch (UnsupportedFlavorException ufe) { } catch (IOException e) {

canImport关键代码:

public boolean canImport(JComponent c, DataFlavor[] flavors) {

for (int i = 0; i

if (DataFlavor.javaFileListFlavor.equals(flavors[i])) { }

return true;//数据导入成功

}

return false;//数据导入失败

3.2.5监听模块

Listener模块用于服务端监听用于监听用户数状态,及文本消息,文件传输信息;它继承Thread类。该类中run()方法的while循环条件设置为true,实现消息的持续循环监听,从而获得在线用户数量,消息文件发送结果等状态监听。 关键代码如下:

recName.setLength(recData.length); JOptionPane.showMessageDialog(null,

this.getClass() + e.toString(), "错误", JOptionPane.DEFAULT_OPTION);

} catch (IOException e) {

try {

DatagramPacket recName = new DatagramPacket(recData, recData.length); DatagramSocket recSocket = new DatagramSocket(2007); while (true) {

try {

recSocket.receive(recName);

String data = new String(recName.getData(), 0,

recName.getLength(), "UTF-8");

String userName = data.substring(1); char flag = data.charAt(0); if (flag == 'S') {

MainFrame.detect('R', recName.getAddress(),

MainFrame.message);

MainFrame.m.addToTable(recName.getAddress(), userName); MainFrame.m.setCount("在线人数: "

+ MainFrame.m.tableModel.getRowCount());

} else if (flag == 'M') {

MainFrame.detect('A', recName.getAddress(), "return"); String msg = userName

.substring(userName.indexOf("|") + 1);

userName = userName.substring(0, userName.indexOf("|")); JOptionPane.showMessageDialog(null, msg, "来自"

+ userName + "的消息", JOptionPane.DEFAULT_OPTION); + recName.getAddress().getHostAddress() + ")的消息:" + msg);

MainFrame.append("log.txt", "来自" + userName + "("

} else if (flag == 'A' && MainFrame.m.accRe)

JOptionPane.showMessageDialog(null, "消息已发送到!", "提示",

JOptionPane.DEFAULT_OPTION);

}

}

JOptionPane.showMessageDialog(null, e.toString(), "错误",

JOptionPane.DEFAULT_OPTION); }

} catch (SocketException e) {

3.2.6充当服务端模块

Server充当服务端功能模块,用于对接受到的信息进行反馈。Server.java同样继承了Runnable类。作为服务端程序设计,利用ServerSocket类的构造函数ServerSocket(int port)创建一个ServerSocket类的对象,其中的参数port是用于指定的端口,本程序中的具体参数是MainFrame.PORT,即主程序中设置的具体端口。在代码中ServerSocket创建的具体实例用于接收连接请求。服务端程序(参见关键代码)用server.accept()知道创建连接并返回最近的一个最近创建的Socket即 “so”,“so”绑定了客户程序的IP地址以及对应的端口号。紧接着创建一个名为newThread的线程用于递归创建服务端连接(即前面所述),并对线程设置优先级以便不同线程能按监听相应的先后顺序执行。 关键代码如下:

try {

} try {

long count;

byte[] buffer = new byte[1024];

DataOutputStream out = new DataOutputStream(

mySocket.getOutputStream());//输出的套接字信息 mySocket.getInputStream(), 8192);

BufferedInputStream inb = new BufferedInputStream(

DataInputStream in = new DataInputStream(inb);//接受的套接字信息 ObjectInputStream oin = new ObjectInputStream(

mySocket.getInputStream());

mySocket.getOutputStream());//信息确认

ObjectOutputStream oout = new ObjectOutputStream(

ServerSocket server = new ServerSocket(MainFrame.PORT);//设置一个服务器套接字 while (true) { }

JOptionPane.showMessageDialog(null,

e.getMessage() + this.getClass(), "错误",JOptionPane.ERROR_MESSAGE);

Socket so = server.accept();//接受服务

Thread newThread = new Thread(new Server(false, so)); newThread.setPriority(6); newThread.start();

} catch (Exception e) {

} else {

configed = false;

fileSelect f = new fileSelect(fileVector, mySocket

.getLocalAddress().getHostName(), 2);

f.setLocationRelativeTo(null);//显示连接界面 f.setVisible(true); // receive file while (!f.closed) { Thread.currentThread();

Thread.sleep(300);//时间间隔设置

}

oout.writeObject(fileVector);// oout.flush(); f.dispose();

totalSize = in.readLong();//获取整个文件的大小 int rSize;

longif (totalSize > 0) { JFrame frame = new JFrame();

frame.setTitle("接收文件");//显示出接收文件界面 JLabel lable1 = new JLabel(); JLabel lable2 = new JLabel(); JLabel lable3 = new JLabel();

frame.add(lable1, "North");//添加一个标签在界面的上方 frame.add(lable3, "South");//添加一个标签在界面的下方

receivedSize = 0;//初始化接收到文件的大小为0 String Lmessage1 = "总共要接收: " + String.valueOf(totalSize / 1024) + " KB"; String Lmessage2 = "已接收: " + String.valueOf(receivedSize / 1024) + " KB "

+ "速度: 0";

String Lmessage3 = "正在接收文件:";

。。。。。。。(下面代码略)

第四章 软件界面设计与程序主模块实现

4.1界面设计

4.1.1界面布局

设置区域:包括,文件选择,刷新,发送选项,IP广播配置按钮,如图4-1所示。文件选择主要是在给对方放松文件时需要用到的功能界面,当点击文件按钮后就会弹出一个选择文件对话框,按照文件路径选择目标文件。帮助即是一些关于系统软件的一些说明。刷新功能主要用来刷新局域网内本机的信息以及局域网内的其它主机信息。发送主要实现的是和局域网内的其它客户端进行文本聊天功能。设置即是IP广播配置按钮,根据需要可以设定一个小范围的广播IP地址。

图4-1界面布局图

4.1.2用户区域

显示在线的PC用户列表,用户名称为PC名,如图4-2所示。当用户需要向对方发送文件和文本信息时,需要在这个界面上选择对应的客户端用户然后进行文件的送饭和文本信息的发送。在用户进入局域网时最好将自己的主机名和用户名进行重命名,不然就会使用IP地址进行代替,这样不利于分清对应的客户端。

图4-2局域网用户显示界面

4.1.3聊天区域

聊天区域文本框,如图4-3所示。该功能区主要是局域网内客户端之间进行文本信息交流的主要区域,类似于QQ聊天窗口的简单版本。

图4-3 聊天区域

4.2主模块与功能模块的组织实现

4.2.1 主程序运行界面

如图4-4所示,问系统软件的主要功能界面。为了进行系统测试,然后在用户列表区域选择自己主机发送一条文本信息“Maybe 廖兵,四川大学锦江学院”,发送之后就会出现如图4-4一个对话框。

图4-4 系统主界面

该模块的实现主要是通过MainFrame模块是程序的主框架。该模块充当程序的主要支撑。该模块继承了JFrame类。JFrame类是一个容器类,用于添加程序的各种组件,从而实现程序运行的界面。 4.2.2 MainFrame.java组成

在MainFrame中首先声明定义了各种界面用到的组建,及共有数据域参数: 例如:

public DefaultTableModel tableModel = new DefaultTableModel(

new Object[][] {}, new String[] { "主机名", "用户名", "ip地址" });

这个声明是声明定义一个默认表格模型用于显示用户列表,对应界面如图4-5所示。 参数类型Vector为对应自动增长的对象数组:fileVector为局域网传输显示对应文件的列表;sendingFile为传送文件进度列表;BCIP为广播的IP地址列表。其他类型参数如JFrame,JTable,JPanel,JButton对应各种界面组建。参数

message,nearIP,PORT分别为定义的String类型的消息,IP地址,服务端口。

图4-5 用户列表图

Run()方法中的关键代码段:

try {

byte[] buffer = new byte[1024];

Socket sendSocket = new Socket(address, MainFrame.PORT);//初始化一个Socket套接字 DataInputStream in = new DataInputStream(

sendSocket.getInputStream());

sendSocket.getOutputStream(), 512);//设置存储数据的大小

BufferedOutputStream outb = new BufferedOutputStream( DataOutputStream out = new DataOutputStream(outb);

ObjectOutputStream oout = new ObjectOutputStream(out);//设置输出对象 oout.writeObject(fileVector); oout.flush();//刷新

ObjectInputStream oin = new ObjectInputStream(in); if (MainFrame.m.accRe) }

JOptionPane.showMessageDialog(null, "消息已发送到!", "提示",

JOptionPane.DEFAULT_OPTION);//获取到消息

for (int i = 0; i

File temp = (File) accVector.get(i);//获取到文件 send += " " + temp.getName();//发送的文件名称 getFiles(temp, "", temp.getParent());

主程序的run()方法中首先判断端口是否被占用(用!isOnly()来判断 )然后调用Listener模块功能进行在线用户的监听,及相关信息传递情况,紧接着启用一个Server(工程模块解说参见3.2.6)线程用于创建ServerSocket连接进行消息文件传递.方法detect()中调用BroadCast模块(见3.2.1)来获取客户端的相关信息。在start()方法中调用detect的获取的对应消息类型进行初始化在线人数,本地ip地址段等,本功能是通过局域网广播来实现的。

try {

IntAddress sendAddress; String strIP;//设置IP字符串

for (int i = 0; i

strIP = (String) BCIP.get(i); int type = getIPType(strIP); if (type == 1) { }

sendAddress = InetAddress.getByName(strIP);//通过IP地址获取局域网在线用户 detect('S', sendAddress, message);//发送消息 strIP = strIP.substring(0, strIP.length() - 1); for (int ip = 2; ip

detect('S',

InetAddress.getByName(strIP

+ String.valueOf(ip)), message);

} else if (type == 2) {

} else if (type == 3) {

strIP = strIP.substring(0, strIP.length() - 3);

for (int ip = 1; ip

for (int j = 2; j

detect('S',

InetAddress.getByName(strIP

+ String.valueOf(ip) + "."

+ String.valueOf(j)), message);//找到相应的主机后

//发送信息

} catch (Exception e) {

}

JOptionPane.showMessageDialog(null, e.getMessage(), "错误",

JOptionPane.ERROR_MESSAGE);

主模块的send()方法完成了用户消息及文件发送功能,其调用了detect()方法及通过建立线程,启用Client模功能(见3.2.2)。这样通过主模块的有效组织方式,将不同功能块之间有机的组织在一起完成了本软件设计目标的基本功能。

第五章 软件调试与测试

5.1获取用户ip功能测试

在局域网内打开两台pc,在这两台pc上各打开本软件,由于打开软件有先后顺序,可能只显示一台pc,打开配置文件进行对应设置,点击刷新,即显示如下界面(图5-2):识别用户成功。如果局域网内有多个PC客户端,那么最后将本机的主机名改成大家都熟悉和认识的名称,以便于后面选择对应的用户进行文本信息的发送以及文件的传送。

图5-1 获取在线用户列表

5.2发送文本消息模块测试

首先从一个客户端进行测试,发送一条“你好啊,这是飞鸽传书测试”的文本信息给另外一个客户端,在另外一个客户端就会显示出如图5-2所示的效果。以下图片分别是两个用户之间进行文本消息对话的截图,测试软件运行成功,达到预期效果。

图5-2 文本信息测试对话框

为了让两个客户端进行文本交流,双方都为对方发送文本信息,如图5-3是Apple—lab的pc发送来的消息,消息内容为“你好啊,我向你发送信息了”,此时还只是在文本编辑阶段,并没有将文本信息发送出去,如果用户在文本编辑区编辑完消息后即可发送该文本信息。

图5-3 文本编辑框

当Apple-lab用户向daomen用户发送文本信息成功后,在Daomen PC端就会出现Apple-lab用户开始发送的信息。接收到信息的效果如图如图5-4所示是Daomen PC向Apple-lab发送信息的截图。

图5-4 文本信息接收窗口

通过系统设计可知,在服务器与客户端建立连接以及发送文本信息后,都会得到一个消息反馈,反馈所发送的信息是否成功,如图5-5所示即是文本信息发送成功后的消息反馈对话框。该图说明了文本信息已经成功发送给对方,同时证明了本系统软件在文本信息发送的功能得到了实现。

图5-5消息发送成功后的反馈对话框

5.3文件传输模块测试

本系统软件的另外一个重要功能即是文件的传送,由于是局域网进行P2P的数据传送,速度会很快。首先通过Apple-lab客户端向daomen客户端发送一个压缩包文件,通过文件路径对话框的选择,选择好对应的压缩包文件后进行发送,发送的文件名为test.zip,发送后在Daomen端就会显示将要接收的文件,在Daomen端点击接收该文件后直到传送成功。发送文件和成功接受到文件的效果图如图5-6和图5-7所示。

图5-6 接收文件对话框

图5-7 文件发送完毕对话框

为了测试文件的多样性,再次发送多个PDF文件进行测试,当同时发送多个文件时,在界面上会显示出每一个文件的传送进度,总共要发送的文件大小以及在发送过程中的传输速度,在选择发送文件或者整个文件夹时选择进行文件选择对话框,对应的效果图如图5-8和图5-9所示:

图5-8 发送文件进度效果图

选择文件后显示的界面,如图5-9:

图5-9 选择文件对话框

5.4设置模块测试

点击界面设置按钮,弹出如下界面(图5-11),在本界面可设置广播的网段,可设置一个计算机IP地址,也可设置整个局域网IP网段,设置后,点击刷新即可显示所以在网段内在线的用户:

图5-11 服务设置

从以上测试中,软件基本达到预期设计目标,软件功能实现基本成功完成,没有检测出明显的错误。到此软件阶段完成,可以投入试使用阶段。

第六章 总结

在本次制作毕业设计过程中,遇到过很多困难,在导师和同学们的帮助下,最终完成了这次毕业设计。本人针对网络通信进行了深入的学习和网络编程实践,认真对局域网飞鸽传书系统进行了分析与设计,并最后通过JAVA语言进行了实现。所做的主要工作有: 对整个系统进行设计;

基本学会了网络通信编程,主要是SOCKEAT编程;

熟练的使用JAVA语言进行界面布局;

解读了一部分开源的通信代码;

虽然本次毕业设计完成了局域网飞鸽传书的基本功能,但在测试的时候还不是很稳定,特别是在传输数据量大的文件时。本人一定会在以后的学习和生活中更深层次的去学习和研究。

参考文献

[1] 孟凡荣.数据库原理与应用.中国矿业大学,2009(8)28-30

[2] 张虹.软件工程与软件开发工具.清华大学出版社.2009(1)55-75

[3] Bruce Eckel.Thinking in Java.机械工业出版社.2009(6)42-64

[4] 罗军舟等. TCP/IP协议及网络编程技术.清华大学出版社.2008(10)

[5] 孙一林,彭波.Java网络编程实例.清华大学出版社.2003(4)

[6] 李树青.Java通用范例开发金典.电子工业出版社.2009

[7] 王鹏.Java Swing 图形界面开发与案例详解.清华大学出版社.2008

[8] 庞永庆,翟鹏.Java完全自学宝典.清华大学出版社.2008

[9] 刘永华,于春花.Java网络编程.清华大学出版社.2008

[10] Boost Documentation,http://www.boost.org 或 http://boost.sourceforge.net

[11] Boost.Asio Documentation,http://asio.sourceforge.net

[12] 孙桂兰.电子商务网上书店系统.北京:人民邮电出版社,2004

[13] Jalote P.Optimum control limits for employing statistical process control in software

process. IEEE Trans on Software Engineering,2002,28(12)

[14] 萨师煊,王珊.数据库系统概述.第三版.北京:高等教育出版社,2004.

[15] B. Ford, M.I.T., P. Srisuresh, etc. Peer-to-Peer (P2P) communication across middleboxes. http://midcom-p2p.sourceforge.net/draft-ford-midcom-p2p-01.txt 2004

[16] 飞思科技产品研发中心. Java 2应用开发指南[J]. 北京:电子工业出版社, 2002

[17] 薛为民, 夏文红, 解仑.Java应用教程 北京:北京交通大学出版社 2005 [18] http://java.sun.com [19] http://www.microjava.com/

[20] http://www.csdn.net/

[21] Cay s.Horstmann ,Gary Cornell JAVA核心技术. 北京:机械工业出版社,2008

附录

其他其他部分相关代码:

fileSelect:

public classextends javax.swing.JFrame

{

/** Creates new form fileSelect */

public DefaultTableModel tableModel;

publicfileVector;// = new Vector();

public boolean closed =false ;

private int style = 2;

private String user = "";

publicint style)

{

//fileVector.addAll ( v );

this.style = style ;

this.user = user;

fileVector = v;

initComponents ();

tableModel = new DefaultTableModel (

new Object[][]{},

new String []{

"文件名" , "大小" , "用户"

}

);

if ( style == 1)

{

this.setTitle ( "准备发送的文件列表");

tableModel.setColumnIdentifiers (new String []{

"文件名" , "大小" , "位置"

});

}

jTable1.setModel ( tableModel );

if ( style == 2 )

{

this .setTitle ( user + "发送给你的文件");

jButton3.setVisible ( false );

}

updateTable();

}

/** This method is called from within the constructor to

* initialize the form.

* WARNING: Do NOT modify this code. The content of this method is

* always regenerated by the Form Editor.

*/

生成的代码 ">//GEN-BEGIN:initComponents private void initComponents()

{

jScrollPane1 = new javax.swing.JScrollPane();

jTable1 = new javax.swing.JTable();

jLabel1 = new javax.swing.JLabel();

jButton1 = new javax.swing.JButton();

jButton2 = new javax.swing.JButton();

jButton3 = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);

setTitle("\u63a5\u6536\u6587\u4ef6");

addWindowListener(new java.awt.event.WindowAdapter()

{

public void windowClosing(java.awt.event.WindowEvent evt)

{

formWindowClosing(evt);

}

});

jTable1.setModel(new javax.swing.table.DefaultTableModel(

new Object [][]

{

{null, null, null, null},

{null, null, null, null},

{null, null, null, null},

{null, null, null, null}

},

new String []

{

"Title 1", "Title 2", "Title 3", "Title 4"

}

));

jScrollPane1.setViewportView(jTable1);

jLabel1.setText("\u5c06\u8981\u63a5\u6536\u7684\u6587\u4ef6:");

jButton1.setText("\u5220\u9664");

jButton1.addActionListener(new java.awt.event.ActionListener()

{

public void actionPerformed(java.awt.event.ActionEvent evt)

{

jButton1ActionPerformed(evt);

}

});

致谢

本文讨论了如何利用JAVA技术开发局域网的飞鸽传书类软件,基本实现了软件初期设计目标,使用户在局域网内可以便捷的完成信息交互,文件传输。

在当今电脑网络密布的世界当中,一个简单高效的局域网通信工具是如此的具有实用性,所以我们应当重视对它的相关研究与开发。在这次的毕业设计中,我应用了JAVA开发工具在WINDOWS平台上开发了一个基于WINDOWS平台的局域网通信工具,在这一重要的领域进行了相关的实践,不管是对我的研究能力,还是实际动手能力,还是资料查阅能力,都起了相当大的益处。所以,我决定认真总结这次毕业设计的经验,以及学习到的知识,来更加的充实自己的头脑和完善自己的知识结构。 系统着重研究并实现了网络应用的部分。根据实现的情况看,具有较友好的聊天界面生成效果,以及流畅的网络通信效果。生成的聊天室可以达到基本的聊天要求,具有较高的研究价值。

几个月的忙碌和工作,本次毕业设计已经接近尾声,作为一个川大锦江学院的的毕业设计,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有导师的督促指导,以及一起工作的同学们的支持,想要完成这个设计是难以想象的。在这里再次感谢我的导师,及给予我帮助的同学们。

通过毕业设计,发现自己在理论研究和实际工作能力等方面都得到了提高,受益匪浅,同时在老师的指导和课题组同学的共同帮助下,及时总结研究成果,这些无疑会对我今后的工作和学习带来很大的帮助。

进入社会后,我以后会更加努力,是学校给我学习的机会,在以后的生活中继续提高自己,为自己创造更多的机会,更好的明天!最后我要感谢我的指导老师,感谢四川大学锦江学院计算机学院对我的培养。


相关文章

  • 基于Linux的飞鸽传书的设计---开题报告
  • 题目类型(打√选择) 一.文献综述 设计(√) 论文( ) 当人类进入到崭新的 21 世纪后,世界也转变为以知识和信息为主的新时代.信息的需求量和运输 量不断增加,使得计算机通信技术有了突飞猛进的变化.网络的使用频率和使用范围都越来越广,而 ...查看


  • 简单聊天系统的设计与实现
  • JISHOU UNIVERSITY 专业课课程论文 题 目: 作 者: 学 号: 所属学院: 专业班级: 总 评 分: 完成时间: 简单聊天系统的设计与实现 信息科学与工程学院 吉首大学信息科学与工程学院 简单聊天系统的设计与实现 (吉首大 ...查看


  • 本科计算机论文题目
  • 基于asp 语言的测试项目 学生信息管理系统的设计与实现 基于ASP.NET 的社区人口管理系统 基于ASP.NET 的课程教学网站设计 公司会议网站 C#高校工资管理系统 C#在线点歌系统 <数据库原理>精品课程网站设计 教师 ...查看


  • 软件工程毕业设计
  • 天 津 师 范 大 学 本科毕业论文(设计) 题目:网上互动交流平台的设计与实现 学 院:计算机与信息工程学院 学生姓名: 龚玲玲 学 号: 07509273 专 业: 软件工程 年 级: 2007级 完成日期: 2011年5月 指导教师: ...查看


  • 科技写作科研(论文)选题题目名称参考
  • 科技写作科研(论文)选题题目名称参考 1. 基于Struts 的企业人力资源管理系统的设计与实现 2. 基于云计算的HIS 系统-挂号子系统的设计与开发 云平台下的HIS 系统,使用Java 或C++. 3. 基于云计算的HIS 系统-收费 ...查看


  • (软件的可扩展性)基于java的局域网聊天系统
  • ・242・ J OU RNAL OF N EIJ IAN G NORMAL UNIV ERSIT Y 内江师范学院学报第23卷(增) (2008) 基于java 的局域网聊天系统 汪桃华, 宋 兵, 万 方 3 (内江师范学院计算机科学院, ...查看


  • 计算机网络课程论文模板及选题
  • 武汉理工大学 计算机网络课程论文 题目作者学院专业学号指导教师 信息工程学院 电子信息工程 李方敏 二〇一五年 月 日 武汉理工大学信息工程学院课程论文诚信声明 本人声明:所呈交的课程论文,是本人在指导老师的指导下,独立开展工作所取得的成果 ...查看


  • 软件工程求职简历
  • 个人基本信息 姓名:*** 国籍: 中国 目前所在地: 广州 民族: 汉族 户口所在地: 珠海 身材: 175 cm kg 婚姻状况: 未婚 年龄: 25 岁 求职意向及工作经历 人才类型: 普通求职 应聘职位: 计算机类:软件工程师 电子 ...查看


  • 计算机专业毕业论文题目_大全(1)
  • 目 录 ASP 类计算机专业毕业论文题目.................................................................................................... ...查看


热门内容