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
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值