用Java实现P2P网络模型

上传人:飞*** 文档编号:6320341 上传时间:2017-09-10 格式:DOC 页数:6 大小:55KB
返回 下载 相关 举报
用Java实现P2P网络模型_第1页
第1页 / 共6页
用Java实现P2P网络模型_第2页
第2页 / 共6页
用Java实现P2P网络模型_第3页
第3页 / 共6页
用Java实现P2P网络模型_第4页
第4页 / 共6页
用Java实现P2P网络模型_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《用Java实现P2P网络模型》由会员分享,可在线阅读,更多相关《用Java实现P2P网络模型(6页珍藏版)》请在金锄头文库上搜索。

1、用 Java 实现 P2P 网络模型蔡雄 缪淮扣(上海大学计算机工程与科学学院, 上海, 200072)摘要:本文简单介绍了 P2P 技术以及在 TCP/IP 网络协议下的网络模型和通信协议。给出了用 Java 语言实现 P2P 网络模型的方法和技术。关键词:计算机系统结构;TCP/IP;P2P;Java 语言The Implementation of P2P network Model Using JavaCAI Xiong MIAO Huaikou(School of Computer Engineering and Science, Shanghai University, Shangh

2、ai, 200072)Abstracts: P2P Technology, network model and the communication protocol under TCP/IP are introduced briefly in this paper. The method and technology of implementing P2P network model using Java are presented.Keywords: computer architecture; TCPIP; P2P; Java language1. 引言Peer-to-Peer(P2P)中

3、的 Peer 是对等点。它既可以是性能强大的服务器,也可以是我们日常使用的普通个人电脑。它们组成了网络,它们既是网络服务的提供者,也是网络服务的请求者。正因为如此,网络的服务的提供者不再局限于服务器,它们的数量毕竟有限,它们的性能也不足以满足日益增长的需要,而整个网络作为一个服务者所带来的影响不言而喻。目前还未见到使用 Java 来实现 P2P 网络模型的报道。Java 是一种完全面向对象的开发语言,Java 的可读性和设计的简易性都比其他语言要好。但是因为 Java 程序的运行速度不理想,尤其在要求速度的网络应用中,这样使得 Java 的应用更少。可是随着 Java 的不断发展,性能越来越高

4、,Java 的各种优势也得以体现。2. P2P 的网络模型P2P 的网络模型可以分成很多种,目前主要的网络模型是 目录式动态配置模型。在目录式模型中,一台或多台有特殊用途的服务器为对等点提供目录服务。虽然还没有彻底的离开服务器,但是服务器的作用已经大大降低。对等点向目录服务注册关于自身的信息(其名称、地址、资源和元数据) ,并根据目录服务器中信息的查询,使用目录服务来定位其它对等点。Napster 模型就是一种典型的使用动态配置模型(目录式)的网络模型5。目录式动态配置模型如图 1 所示。图 1 目录式动态配置模型(红点表示 ServerPeer)服务器的作用降低,对等点(Peer)之间的联系

5、也就更为紧密了。如图 2 所示,上传方所在的对等点必须肩负起原先服务器所承担的任务,也就是文件的传输工作。P2P 技术最为关键的问题是如何更有效地提高文件传输的速度。必须有一套严格的、规范的通讯协议,来协调 Peer 的行动。Peer 文件传输 Peer图 2 文件传输模型3. P2P 的通讯协议Peer 之间的通讯必须规定一种协议(也可以说是一种相互可以理解,不会产生歧义的规范) ,它以特定的编码方式传输指令,这样可以在不同的操作系统间准确无误地传输指令。用户发出指令-编码-发送-接受指令-解码-执行,这是指令传输的整个过程。如图 3 所示,P2P 之间开始通讯,发送请求,如果请求被允许,可

6、以开始下载数据,否则不能下载。P2P 文件传输的基础就是文件的分块。把一个文件分成等长的字节称为块(一般块的大小为 2E162E18) ,每次都传输的字节大小为 2E15。这样就把一个文件传输的任务分解成多个可以并发进行的较小的任务。在多线程进行多个任务的下载可以最大限度地利用网络,提高下载速度。File 表示下载指定文件的指令。File 包含请求文件的相对路径,但上传方接收到请求后,必须转换为绝对路径。使用相对路径的目的是避免泄漏共享资源方的信息。防止其他的用户下载和了解共享用户方没有共享的资源。State 表示服务方接受到 File 指令后的响应状态。Request 表示下载文件指定位置的

7、字节。Request 包括请求的块号、块内开始位置、长度。包括块号、块内开始位置。Block 表示上传文件指定位置的字节。请求方(下载) 服务方(上传)FileStateif connect is successfulRequestBlock图 3 通讯协议模型4. 基于 Java 的软件开发4.1 程序的主要功能模块Java 编程中,使用 TCP 协议的是类 Socket,通过调用类 Socket 的方法,接受和发送数据包,如同读取本地文件流一样方便4。上传模块:当接受到上传请求时,把文件的相对路径转化为本地的绝对路径,然后返回上传准备状态(成功或者失败) 。如果上传准备成功,可以开始传输数

8、据。当接受到上传文件的指令,读取指定块,传输给请求者。如图 4 所示。上传模块的主要实现方式如下:/ 上传模块:接受请求,上传字节块try / 上传方 socket 的输入流和输出流的定义InputStream in = socket.getInputStream();OutputStream out =socket.getOutputStream();/ 存放就收到的请求和请求的字节数byte b = new bytedefaultBufferSize;int length; try/ 循环接受请求,上传文件块while(true) / 接受请求 requestlength = in.rea

9、d(b); / 上传块,block 表示一个文件块out.write(block.getBytes();out.flush(); catch(IOException e)e.printStackTrace();catch(IOException e)e.printStackTrace();finallysocket.close(); / 关闭 socket 下载模块:相对于上传模块,下载模块就是处理转换相对路径发送上传准备状态成功 失败上传文件块结束接受请求文件的下载。首先发送下载文件的相对路径,等待上传方的响应状态。如果收到成功的响应,发送请求下载块,接受传输来的数据块,然后继续下一个块,直

10、至下载结束。如图 5所示。实现方法如下所示:/下载模块:读取字节块 try/ 下载方 socket 的输入流和输出流的定义OutputStream out = socket.getOutputStream();InputStream in = socket.getInputStream();/ 定义初始数据块,接受文件块的字节数组,字节长度发送相对路径成功发送请求下载块接受数据块图 4 上传模块 图 5 下载模块 Block block = null;byte b = new bytedefaultBufferSize;byte bytes = new byter.getLength();in

11、t length = 0;/ 发送请求 requestout.write(r);out.flush();/ 接受块length = in.read(bytes);block = decodeBlock(info, bytes, length);/ 返回接受的数据块return block;catch(ProtocolException e)e.printStackTrace();throw new IOException();/下载模块:建立连接,发送相对路径 / 建立下载方 socketsocket = new Socket(url.getHost( ), url.getPort();/下载

12、方 socket 的输入流和输出流的定义OutputStream out = socket.getOutputStream();InputStream in = socket.getInputStream();trybyte b = new bytedefaultBufferSize;int length = 0; / 发送请求 connectionout.write(url.getSharePath();out.flush();/ 接受回应length = in.read(b);/ 判断连接是否成功?不成功抛出异常if(!(decodeConnected(ConvertUtil.parseS

13、tring(b, length)= SUCCESS)throw new IOException();catch(ProtocolException e)e.printStackTrace();throw new IOException();4.2 其他相关模块概述:除了 P2P 网络模型的下载和上传设计,为了便于使用,控制下载过程是十分必要的,同时也是十分实用的。最为熟悉的便是断点续传功能。在下载的过程中,记录下文件下载的位置和已下载的字节数,并保存在 xml 文件中6。如果下载过程被中断,可以在已下载的位置后继续,而不必担心下载的数据丢失,重新下载整个文件。除此之外,上传方必须提供上传文件的

14、信息、上传方的 IP 地址、端口号给下载方,便于下载方下载。这样一台记录所有共享用户的共享信息的服务器就必不可少的,通过服务器,客户端可以直接了解所有共享资源的位置(上传方的文件位置,上传服务的 IP 地址,端口号等信息) 。5.结论P2P 是一种功能强大的网络模型,Java 是一种完全面向对象的开发语言,可读性强,设计简易。本文给出了用 Java 实现 P2P 网络模型的方法和技术。参考文献1 Jon Postal, TRANSMISSION CONTROL PROTOCOL DARPA INTERNET PROGRAM ROTOCOL SPECIFICATION, September 19

15、81, http:/www.ietf.org/rfc/rfc0793.txt?number=7932 Erich Gamma etc, Design Pattern: Elements of Reusable Object-Oriented Software, China Machine Press, 2000-9-1, 1-13 Bruce Eckel, Java 编程思想第三版,机械工业出版社,2005-5-1, 3-14 Elliotte Rusty Harold, Java Network Programming,Second Edition , 中国电力出版社, 2001-8-1, 1-15 Caviler, 【编程】 对等网络 P2P(peer-to-peer) - P2P 网络模型, http:/ 2005-01-276 John Cowan, Reuters Extensible Markup Language (XML) 1.1 W3C Candidate Recommendation 15 October 2002, 15 October 2002 http:/www.w3.org/TR/2002/CR-xml11-20021015/

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 研究报告 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号