java file transfer udp client_java使用udp实现文件传输 | 学步园

这里只是简单的代码这里的文件字节数,和传输的文件名我已经获得了

1>发送端

package org.whvcse.Client;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;

public class Transfer1 {

private BufferedOutputStream bof;

private FileInputStream filestream;

private BufferedInputStream bif;

private FileOutputStream fileoutstream;

//传输文件的字节数(为了简便)

private int size = 8317141;

public void upload(String str, String str1) {

try {

DatagramSocket ds = new DatagramSocket(9999);

DatagramPacket dp = null;

File f = new File(str);

System.out.println(f.length());

byte[] by = new byte[1024];

int before = 0;

filestream = new FileInputStream(f);

bif = new BufferedInputStream(filestream);

if (before < size) {

synchronized (this) {

while (bif.read(by) != -1) {

dp = new DatagramPacket(by, by.length, InetAddress

.getByName(str1), 8888);

ds.send(dp);

before += 1024;

}

}

} else {

byte[] after = new byte[before - size];

bif.read(after);

dp = new DatagramPacket(by, by.length, InetAddress

.getByName(str1), 8888);

ds.send(dp);

}

filestream.close();

bif.close();

} catch (SocketException e) {

// TODO 自动生成 catch 块

e.printStackTrace();

} catch (FileNotFoundException e) {

// TODO 自动生成 catch 块

e.printStackTrace();

} catch (IOException e) {

// TODO 自动生成 catch 块

e.printStackTrace();

}

}

public static void main(String[] args) {

Transfer1 t = new Transfer1();

t.upload("D://新版网酷2011.rar", "192.168.82.112");

}

}

2>接收端

这里实现的是断点的传输,但是由于udp容易丢包很那保证文件的完整性

package org.whvcse.Client;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;

public class Transfer2 {

private BufferedOutputStream bof;

private FileInputStream filestream;

private BufferedInputStream bif;

private FileOutputStream fileoutstream;

//传输文件的字节数

private int size=8317141;

public void down(String str) {

try {

File f = new File("c:/"+str);

fileoutstream = new FileOutputStream(f);

bof= new BufferedOutputStream(fileoutstream);

DatagramSocket ds = new DatagramSocket(8888);

byte[] by = new byte[1024];

DatagramPacket  dp=null;

System.out.println("数据包");

int before=0;

boolean transfer=true;

if(before<=size)

{

synchronized (this) {

while (transfer) {

dp = new DatagramPacket(by, by.length);

ds.receive(dp);

control(dp);

before += 1024;

if(before>size)

{

transfer=false;

System.out.println("yes");

}

System.out.println(dp);

System.out.println(before);

}

}

}else

{

byte[] after = new byte[before-size];

dp = new DatagramPacket(after, after.length);

System.out.println(size);

ds.receive(dp);

control(dp);

ds.close();

}

fileoutstream.close();

bof.close();

} catch (SocketException e) {

// TODO 自动生成 catch 块

e.printStackTrace();

} catch (FileNotFoundException e) {

// TODO 自动生成 catch 块

e.printStackTrace();

} catch (IOException e) {

// TODO 自动生成 catch 块

e.printStackTrace();

}

}

public void control(DatagramPacket dp) {

byte[] by = new byte[dp.getLength()];

by=dp.getData();

try {

bof.write(by, 0, by.length);

} catch (FileNotFoundException e) {

// TODO 自动生成 catch 块

e.printStackTrace();

} catch (IOException e) {

// TODO 自动生成 catch 块

e.printStackTrace();

}

}

public static void main(String[] args) {

Transfer2 t=new Transfer2();

t.down("新版网酷2011.rar");

}

}

QQ的文件传输好像也是udp不知道为什么qq他使用udp怎么就能保证文件的完整性了?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值