这里只是简单的代码这里的文件字节数,和传输的文件名我已经获得了
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怎么就能保证文件的完整性了?