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

来源:互联网 发布:net网络是什么意思 编辑:程序博客网 时间:2024/05/05 20:37
  //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);//限制传输速度 } } } 

原创粉丝点击