java中UDP文件传输怎么实现?

  //Send
  DatagramSocket ds = new DatagramSocket(5555, InetAddress.getByName("10.0.0.1"));
  InputStream in = new FileInputStream(new File("a.txt"));
  byte[] b = new byte[10240];
  int c = in.read(b);
  in.close();
  DatagramPacket dp = new DatagramPacket(b, c);
  ds.send(dp);
  
  //Receive
  DatagramSocket ds2 = new DatagramSocket(5555);
  DatagramPacket dp2 = new DatagramPacket(b,b.length);
  ds2.receive(dp2);
  OutputStream out=new FileOutputStream(new File("out.txt"));
  out.write(dp2.getData());
  out.close();
 
示例:
//接收端 


import java.io.BufferedOutputStream; 
import java.io.DataOutputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 

public class UdpReceive { 

public static DatagramSocket dataSocket; 
public static final int PORT = 8; 
public static byte[] receiveByte; 
public static DatagramPacket dataPacket; 
public static void main(String[] args) throws IOException { 
dataSocket = new DatagramSocket(PORT); 
DataOutputStream fileOut = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("D:\\TDDOWNLOAD\\b.txt"))); 
int i = 0; 
while(i == 0){//无数据,则循环 
receiveByte = new byte[1024]; 
dataPacket = new DatagramPacket(receiveByte, receiveByte.length); 
dataSocket.receive(dataPacket); 
i = dataPacket.getLength(); 
//接收数据 
if(i > 0){ 
//指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点 
fileOut.write(receiveByte,0,i); 
fileOut.flush(); 
i = 0;//循环接收 
} 
} 
} 

} 


//发送端 


import java.io.BufferedInputStream; 
import java.io.DataInputStream; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.Inet4Address; 
import java.util.Date; 
import java.util.concurrent.TimeUnit; 

public class UdpSend { 

public static DatagramSocket dataSocket; 
public static final int PORT = 8; 
public static byte[] sendDataByte; 
public static DatagramPacket dataPacket; 
public static void main(String[] args) throws IOException ,InterruptedException{ 
String filePath = "D:\\a.txt"; 
DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath))); 
dataSocket = new DatagramSocket(PORT + 1); 
sendDataByte = new byte[1024]; 
int read = 0; 
long a = new Date().getTime(); 
while(true){ 
if(fis != null){ 
read = fis.read(sendDataByte); 
} 
if(read == -1){ 
System.out.print("用时:"); 
System.out.println(new Date().getTime() - a); 
break; 
} 
dataPacket = new DatagramPacket(sendDataByte,sendDataByte.length,(Inet4Address) Inet4Address.getByName("localhost"), PORT); 
dataSocket.send(dataPacket); 
TimeUnit.MICROSECONDS.sleep(1);//限制传输速度 
} 
} 

} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值