用JAVA实现一个点对点文件传输软件

wuyan19831013 2005-05-24 10:51:27
马上要做课件了!题目是:点对点的文件传输软件
具体要求:
1:直接使用TCP或UDP协议实现通信
2:能点对点的正确传输文件
3:传输包的长度可方便的在运行界面进行定制
4:可方便的在运行界面中指定好传输的文件
我想用JAVA实现,但我对socket编程不太熟悉,对UI还行
大家谈谈该如何实现,具体用到哪些技术? 该软件实现难度如何?若有实现代码可以参考,小弟感激不尽!



...全文
914 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
说好不能打脸 2005-06-28
  • 打赏
  • 举报
回复
嘿嘿嘿,写得不好,不要见笑,注释我加上了的。
说好不能打脸 2005-06-28
  • 打赏
  • 举报
回复
这个不要使用socket,因为你要用到HTTP协议且支持断点传输,而java的net包是作好了的,你只需要使用就可以了,用io包很容易就可以指定续传位置。用http实现断点续传的核心代码我给你:

import java.io.RandomAccessFile;
import java.io.File;
import java.io.InputStream;
import java.io.DataInputStream;
import java.io.BufferedInputStream;
import java.io.FileInputStream;

import java.net.HttpURLConnection;
import java.net.ConnectException;
import java.net.URL;

import java.lang.Runnable;
import java.lang.Thread;

import java.util.Date;
public class TestUpDown2 implements Runnable{
private HttpURLConnection connection;//存储连接
private int downsize = -1;//下载文件大小,初始值为-1
private int downed = 0;//文加已下载大小,初始值为0
private RandomAccessFile savefile;//记录下载信息存储文件
private URL fileurl;//记录要下载文件的地址
private DataInputStream fileStream;//记录下载的数据流

public TestUpDown2(){
try{
/*开始创建下载的存储文件,并初始化值*/
File tempfileobject = new File("h:\\webwork-2.1.7.zip");
if(!tempfileobject.exists()){
/*文件不存在则建立*/
tempfileobject.createNewFile();
}
savefile = new RandomAccessFile(tempfileobject,"rw");

/*建立连接*/
fileurl = new URL("https://webwork.dev.java.net/files/documents/693/9723/webwork-2.1.7.zip");
connection = (HttpURLConnection)fileurl.openConnection();
connection.setRequestProperty("Range","byte="+this.downed+"-");

this.downsize = connection.getContentLength();
//System.out.println(connection.getContentLength());

new Thread(this).start();
}
catch(Exception e){
System.out.println(e.toString());
System.out.println("构建器错误");
System.exit(0);
}
}

public void run(){
/*开始下载文件,以下测试非断点续传,下载的文件存在问题*/
try{
System.out.println("begin!");
Date begintime = new Date();
begintime.setTime(new Date().getTime());
byte[] filebyte;
int onecelen;
//System.out.println(this.connection.getInputStream().getClass().getName());
this.fileStream = new DataInputStream(
new BufferedInputStream(
this.connection.getInputStream()));
System.out.println("size = " + this.downsize);
while(this.downsize != this.downed){
if(this.downsize - this.downed > 262144){//设置为最大256KB的缓存
filebyte = new byte[262144];
onecelen = 262144;
}
else{
filebyte = new byte[this.downsize - this.downed];
onecelen = this.downsize - this.downed;
}
onecelen = this.fileStream.read(filebyte,0,onecelen);
this.savefile.write(filebyte,0,onecelen);
this.downed += onecelen;
System.out.println(this.downed);
}
this.savefile.close();
System.out.println("end!");
System.out.println(begintime.getTime());
System.out.println(new Date().getTime());
System.out.println(begintime.getTime() - new Date().getTime());
}
catch(Exception e){
System.out.println(e.toString());
System.out.println("run()方法有问题!");
}
}

public static void main(String[] src) throws Exception{
new TestUpDown2();
}
}
oyljerry 2005-06-28
  • 打赏
  • 举报
回复
参考一些java 的socket 例子
真心无著 2005-06-27
  • 打赏
  • 举报
回复
我是VC++的初学者,老师却给我们出了道难题:
局域网内的点对点文件传输实现。
要求:机器的寻址原理,文件的传输原理,怎么进行文件的完整传输问题,验证方式如何,算法原理说明,包括文件的分割等,使用什么协议,使用的组件是什么,自定义的组件类的说明。
语言要求:VC++
请高手大哥帮帮忙,小弟万分感谢!
ben_na 2005-05-27
  • 打赏
  • 举报
回复
JAVA编写网络很方便的,看看相应的库或例子。还得研究一下简单的多线程哦,如果你需要介面的话
wuyan19831013 2005-05-26
  • 打赏
  • 举报
回复
我还顶!
wuyan19831013 2005-05-25
  • 打赏
  • 举报
回复
我顶!
wuyan19831013 2005-05-25
  • 打赏
  • 举报
回复
我再顶~!

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧