戴镇玲PP文件共享程序.doc

上传人:wj 文档编号:4844231 上传时间:2023-05-07 格式:DOC 页数:21 大小:380.50KB
下载 相关 举报
戴镇玲PP文件共享程序.doc_第1页
第1页 / 共21页
戴镇玲PP文件共享程序.doc_第2页
第2页 / 共21页
戴镇玲PP文件共享程序.doc_第3页
第3页 / 共21页
戴镇玲PP文件共享程序.doc_第4页
第4页 / 共21页
戴镇玲PP文件共享程序.doc_第5页
第5页 / 共21页
戴镇玲PP文件共享程序.doc_第6页
第6页 / 共21页
戴镇玲PP文件共享程序.doc_第7页
第7页 / 共21页
戴镇玲PP文件共享程序.doc_第8页
第8页 / 共21页
戴镇玲PP文件共享程序.doc_第9页
第9页 / 共21页
戴镇玲PP文件共享程序.doc_第10页
第10页 / 共21页
戴镇玲PP文件共享程序.doc_第11页
第11页 / 共21页
戴镇玲PP文件共享程序.doc_第12页
第12页 / 共21页
戴镇玲PP文件共享程序.doc_第13页
第13页 / 共21页
戴镇玲PP文件共享程序.doc_第14页
第14页 / 共21页
戴镇玲PP文件共享程序.doc_第15页
第15页 / 共21页
戴镇玲PP文件共享程序.doc_第16页
第16页 / 共21页
戴镇玲PP文件共享程序.doc_第17页
第17页 / 共21页
戴镇玲PP文件共享程序.doc_第18页
第18页 / 共21页
戴镇玲PP文件共享程序.doc_第19页
第19页 / 共21页
戴镇玲PP文件共享程序.doc_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

戴镇玲PP文件共享程序.doc

《戴镇玲PP文件共享程序.doc》由会员分享,可在线阅读,更多相关《戴镇玲PP文件共享程序.doc(21页珍藏版)》请在冰点文库上搜索。

戴镇玲PP文件共享程序.doc

合肥学院

计算机科学与技术系

课程设计报告

2010~2011学年第一学期

课程

JAVA课程设计

课程设计名称

P2P文件共享程序

学生姓名

戴镇玲

学号

0704031006

专业班级

07网络工程1班

指导教师

许强、张贯虹

2010年9月

一.需求和规格说明

1.课程设计目的

通过课程设计,学生在下述各方面的能力应该得到锻炼:

(1)进一步巩固、加深学生所学专业课程《JAVA语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。

(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。

(3)利用所学知识,开发小型应用系统,掌握运用JAVA语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。

(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的设计方案。

(5)熟练掌握JAVA语言网络编程、输入输出流,灵活运用各种类库。

2.课程设计名称及内容

课程设计名称:

P2P文件共享程序

设计内容:

编写一个可以进行点对点的文件共享程序,能够进行网络上的文件共享和传输。

3.任务和要求

该程序软件可以在任何一个标准配置的主机上运行,运行该程序的主机既是客户端,也是服务器端,是一个多线程程序。

作为服务器端,运行一个服务器线程始终监听指定的端口,如果网络上有其他主机要求建立连接,互相交换共享文件信息,双方就可以互相下载对方共享的文件。

4.设计方案提示

程序中的端口可以设置的高些,因为很多的低端端口被系统所使用。

可以使用JAVA中的Socket对象中的getInputStream方法和getOutputStream方法来传输数据流。

5.相关背景

可以说文件交换的需求直接引发了P2P技术热潮。

在传统的WEB方式中,要实现文件交换需要服务器的大力参与,通过将文件上传到某个特定的网站,用户再到某个网站搜索需要的文件,然后下载,这种方式的不便之处不言而喻。

电子邮件是方便了个人间文件传递问题,却没法解决大范围的交换。

这也是WEB的重要缺陷,P2P就是在情况下横空出世。

P2P很好的解决了传统的C/S模式下瓶颈问题,让资源共享变的更方便,快捷。

用户直接和用户之间进行数据交换,改变了传统的模式。

在理论上,本课题探寻文件共享的基础理论——知识管理理论、计算机网络、分布式存储和心理学——相关研究成果的新结合点,研究在现有理论基础上如何更好的满足人们文件共享的需求,采用分布式、高效的基于P2P技术构建的文件共享网络这种文件共享模式,并明确提出了P2P文件共享网络的整个架构,同时,提出了一个P2P环境下维护数据一致性和可用性的算法;在实践上,课题要实现了一个简单的P2P知识共享网络的框架,给出了原型实现,经过小范围的实验和部署,能够证明P2P文件共享网络能够提供很高的可用性,并且文件共享的效果也应该很好。

二.程序设计

1.设计思想:

P2P即PeertoPeer.称为对等连接或对等网络。

它打破了传统的Client/Server(c/s)或B(Browser)/S(Server)模式.在网络中的每个结点的地位都是对等的。

每个结点既是客户机.也是服务器。

P2P具有非中心化、可扩展性、健壮性、高性能,价格比、隐私保护、负载均衡等优点.并被广泛地运用到ICQ类的即时通信软件、Farsite(Microsoft)/OcellSStore类数据存储软件、Napstor类数据共享软件、Infrasearch、Pointera类数据搜索及查询软件、Netbateh(Inte1)类协同计算软件、Groove类数据或行动协同软件、游戏软件等领域的开发与研究。

P2P文件共享系统从功能上分为如下四个部分。

(1)在本机转移文件:

在本地上既运行客户端,又运行服务器端,这时可以实现文件的转移。

(2)给异机传输文件:

本地运行客户端,另一主机运行服务器端,可以将文件传输给本地局域网的客户端主机。

2.设计表示:

1)布局

本程序需要用到图形界面,所以要牵涉到布局设计。

Server端程序中用到了两种布局类,及GridLayout和BorderLayout类。

其中,我定义了两个三个面板,分别为Jpaneljp1,jp2,jp3.用BorderLayout类将他们一次分布与JFrame的North,Center和South。

jp1上增加在增加Jlabel,jp2上增加两个按钮Jbutton1,Jbutton2,用于选择文件和发送。

最后在jp3上增加进度条。

Client端程序布局更为复杂,其jp3与server端相同,jp1,jp2与之有差异。

多了一个JtextField用于填写IP地址,和一个Jbutton用于确定ip地址,jp2多了一个JTextField用于提示Server端共享的文件名,并提示下载。

2)进度条

为了更加形象具体,还加入了水平进度条。

3)窗口选择器

由于本程序是图形界面,用户可以用类似与windows种的对话窗口来选择以保存的所选的文件。

4)关于网络的net类

本程序是P2P文件共享,是运行于网络平台的软件。

故一定会用到net类。

其中文件传输是,用Socket和ServerSocket两个类就可以模拟出服务端和客户端之间文件的共享与传递。

5)输入输出流

因为本程序最根本是对文件操作,固然少不了输入输出流。

另外,为了提高传输的效率,又设了相当容量的缓冲区。

服务器端先将待传递的数据都写入预先设定好的缓冲区中,当缓冲区满后一次性传输出去。

然后将余下的数据继续写入已经空的缓冲区,如此反复,直到文件结尾。

客户端接收数据的过程与之相似。

只是将传来的数据先写入缓冲区,待缓冲区满后再将缓冲区中的数据一次性写入到指定的文件中。

3.实现注释:

对于题意要求的在任何一个标准配置的主机上运行,运行该程序的主机既是客户端,也是服务器端,是一个多线程程序。

作为服务器端,运行一个服务器线程始终监听指定的端口,如果网络上有其他主机要求传输一个文件,运行客户端双方就可以传递文件功能已基本实现。

4.详细设计表示:

主要算法的框架及实现此算法的成员函数接口。

4.1系统用户界面设计

服务器端主要是用来发送文件的,使用其基本界面依据所要实现的功能为其设计的界面包括浏览(选择所要发送的文件),发送(确定发送开始,激活接口),进度条(显示发送的进度)

4.2系统初始化

4.2.1导人JAVA基本类

importjava.awt.event.*;

//提供处理由AWT组件所激发的各类事件的接口和类

importjava.awt.*;//创建用户界面和绘制图形图像的所有类

importjavax.swing.*;

//提供一组“轻量级”(全部是Java语言)组件,尽量让这些组件在所有平台上的工作方式都相同。

importjavax.swing.event.*;//供Swing组件触发的事件使用

importjava.io.*;//通过数据流、序列化和文件系统提供系统输入和输出

import.*;//为实现网络应用程序提供类。

4.2.2初始化系统界面

publicclassServerextendsJFrameimplementsActionListener,WindowListener

{

JButtonjb0;

JButtonjb1;//按钮

JPaneljp;

JPaneljp1;

JPaneljp2;//面板

JFileChooserjfc;//文件选择器

JTextFieldjtf;//轻量级组件,它允许编辑单行文本

Stringst;//记录文件的路径

JProgressBarjpb;//进度条

Timertimer;//时间器

publicServer(Stringtitle)//启动服务器端的构造器,为其定义标题

{

super(title);

try{

UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");//使用LookAndFeel对象设置当前的默认外观

}

//捕获异常事件

catch(ClassNotFoundExceptione){

e.printStackTrace();

} //如果无法找到LookAndFeel类

catch(InstantiationExceptione){

e.printStackTrace();

}

//如果无法创建一个该类的新实例

catch(IllegalAccessExceptione){

e.printStackTrace();

}//如果该类或初始化程序不可访问

catch(UnsupportedLookAndFeelExceptione){

e.printStackTrace();

//如果lnf.isSupportedLookAndFeel()为false

}

//进度条

jpb=newJProgressBar();//将进度条设为不确定模式

jpb.setOrientation(JProgressBar.HORIZONTAL);

jpb.setMinimum(0);//最小为0%

jpb.setMaximum(100);//最大为100%

jpb.setValue(0);//初始化值为0

jpb.setStringPainted(true);//true确定进度条是否应该呈现进度字符串

timer=newTimer(50,this);//时间间隔

this.setLayout(newBorderLayout());

jp=newJPanel();

jp1=newJPanel();

jp2=newJPanel();

jfc=newJFileChooser();

jtf=newJTextField("请选择待传送的文件");

jb0=newJButton("浏览");

jb1=newJButton("发送");

jp1.setLayout(newGridLayout(1,1));

jp1.add(jtf);

jp.setLayout(newGridLayout(2,1));

jp.add(jb0);

jp.add(jb1);

jp2.setLayout(newGridLayout(1,1));

jp2.add(jpb);

this.add(jp1,"North");

this.add(jp,"Center");

this.add(jp2,"South");

this.addWindowListener(this);

jb0.addActionListener(this);

jb1.addActionListener(this);

}

publicstaticvoidmain(String[]args){

Serveraaa=newServer("服务端");

aaa.setSize(200,150);//宽、高

aaa.setVisible(true);//显示此组件

}

publicvoidactionPerformed(ActionEvente)

{//通过在侦听器a和侦听器b上调用actionPerformed方法处理actionPerformed事件。

intresult;

if(e.getSource()==timer)

{intvalue=jpb.getValue();

jpb.setValue(0);

if(value<100)

{ value++;

jpb.setValue(value);

}

else

{

timer.stop();

jb0.setText("浏览");

}

}

elseif((JButton)e.getSource()==jb0)

{

jfc.setApproveButtonText("确定");

jfc.setDialogTitle("选择文件窗口");

result=jfc.showOpenDialog(this);

if(result==JFileChooser.APPROVE_OPTION)//当用户按下确定

{

st=newString(jfc.getSelectedFile().getPath());

jb0.setText(st);//将此标签的文本设置为指定的文本

}

}

elseif((JButton)e.getSource()==jb1)

{

// 创建文件流用来读取文件中的数据

try{

Filefile=newFile(jb0.getText());

FileInputStreamfos=newFileInputStream(file);

//创建网络服务器接受客户请求

ServerSocketss=newServerSocket(3108);

Socketclient=ss.accept();

timer.start();

//创建网络输出流并提供数据包装器

OutputStreamnetOut=client.getOutputStream();

OutputStreamdoc=newDataOutputStream(

newBufferedOutputStream(netOut));

//创建文件读取缓冲区

byte[]buf=newbyte[20480];

intnum=fos.read(buf);//读文件

while(num!

=(-1)){//是否读完文件

doc.write(buf,0,num);//把文件数据写出网络缓冲区

doc.flush();//刷新缓冲区把数据写往客户端

num=fos.read(buf);//继续从文件中读取数据

}

fos.close();

doc.close();

}

catch(IOExceptione1){

System.out.print("异常");

}

}

}

publicvoidwindowActivated(WindowEvente){

}

publicvoidwindowClosed(WindowEvente){

}

publicvoidwindowClosing(WindowEvente){

System.exit(0);

}

publicvoidwindowDeactivated(WindowEvente){

}

publicvoidwindowDeiconified(WindowEvente){

}

publicvoidwindowIconified(WindowEvente){

}

publicvoidwindowOpened(WindowEvente){

}

}

三.调试及测试

编程是一项综合性的工作,不仅仅需要编程语言的语法知识,更需要对所涉及领域的知识的理解和掌握。

不管什么语言的学习以及实践大致都有相同的方法。

通过课程设计我们也能将学到的知识进行整合并加以强化。

这次JAVA课程设计的题目是P2P文件共享。

之前对P2P这个词有过了解,但是对其技术并没多少了解。

通过在网络上查阅资料,发现需要通过JXTA技术实现比较简单,它提供了完整的P2P技术。

通过任务书,我对这个课程设计有了初步的规划,并查阅资料完成。

相对而言,我做的这个P2P文件共享系统比较简单,仅仅能够实现文件的传输。

答辩过程中,老师对其提出了修改意见,在客户端需要有个功能,能够在服务端共享文件的同时通知具体有什么文件被共享。

通过修改,很快解决了这个功能。

所以一个程序对于我们来说不能仅仅说做完就行了,它还可以扩展很多。

总之,通过这次课程设计,对JAVA所学的知识有了一个整合,并对其部分技术有了进一步的掌握。

四.使用说明

1、运行服务端程序如下图所示:

2.运行客户端程序如下:

3.点击服务器端“浏览”按钮,选择要发送的文件

4.确认要发送的文件,点击服务器端的“发送”按键

5.为准备接收的文件选择要保存的路径,并定义文件名,输入所要保存的文件名,点击“保存”按钮

7.点击客户端中的“接收”,文件传输开始。

8.最后两个文件夹中都有test.txt文件。

源代码:

服务端:

importjava.awt.event.*;

importjava.awt.*;

importjavax.swing.*;

importjavax.swing.event.*;

importjava.io.*;

import.*;

publicclassServerextendsJFrameimplementsActionListener{//,WindowListener

JButtonjb0;

JButtonjb1;

JPaneljp;

JPaneljp1;

JPaneljp2;

JFileChooserjfc;

JTextFieldjtf;

Stringst,st1;

JProgressBarjpb;

Timertimer;

Sockets;

publicServer(Stringtitle)

{

super(title);

try{

UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

}

catch(ClassNotFoundExceptione){

e.printStackTrace();

}

catch(InstantiationExceptione){

e.printStackTrace();

}

catch(IllegalAccessExceptione){

e.printStackTrace();

}

catch(UnsupportedLookAndFeelExceptione){

e.printStackTrace();

}

//进度条

jpb=newJProgressBar();

jpb.setOrientation(JProgressBar.HORIZONTAL);

jpb.setMinimum(0);

jpb.setMaximum(100);

jpb.setValue(0);

jpb.setStringPainted(true);

timer=newTimer(50,this);//时间间隔

this.setLayout(newBorderLayout());

jp=newJPanel();

jp1=newJPanel();

jp2=newJPanel();

jfc=newJFileChooser();

jtf=newJTextField("请选择待共享的文件");

jb0=newJButton("浏览");

jb1=newJButton("共享");

jp1.setLayout(newGridLayout(1,1));

jp1.add(jtf);

jp.setLayout(newGridLayout(2,1));

jp.add(jb0);

jp.add(jb1);

jp2.setLayout(newGridLayout(1,1));

jp2.add(jpb);

this.add(jp1,"North");

this.add(jp,"Center");

this.add(jp2,"South");

//this.addWindowListener(this);

jb0.addActionListener(this);

jb1.addActionListener(this);

addWindowListener(newWin());

}

publicstaticvoidmain(String[]args)

{

Serveraaa=newServer("服务端");

aaa.setSize(200,150);

aaa.setVisible(true);

}

publicvoidactionPerformed(ActionEvente)

{

intresult;

if(e.getSource()==timer)

{intvalue=jpb.getValue();

jpb.setValue(0);

if(value<100)

{

value++;

jpb.setValue(value);

}

else

{

timer.stop();

jb0.setText("浏览");

}

}

elseif((JButton)e.getSource()==jb0)

{

jfc.setApproveButtonText("确定");

jfc.setDialogTitle("选择文件窗口");

result=jfc.showOpenDialog(this);

if(result==JFileChooser.APPROVE_OPTION)//当用户按下确定

{ st=newString(jfc.get

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2