热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用UDP协议高效传输文件

通过采用用户数据报协议(UDP),本研究设计并实现了一种高效的文件传输方法。在发送端,系统利用Java编程语言中的相关类库,如`File`和`FileInputStream`,实现了文件的读取与分段处理,确保了数据的快速传输。该方法不仅提高了传输效率,还降低了网络拥塞的风险,适用于大规模文件传输场景。

发送端

package com.qf.demo4;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 Send {public static void main(String[] args) {// 1 DatagramSocket socket =null;FileInputStream fis = null;try {socket = new DatagramSocket();// 2fis = new FileInputStream(new File("D:\\A.java"));int num = 0;byte[] bs = new byte[1024];while((num = fis.read(bs))!=-1){DatagramPacket packet = new DatagramPacket(bs, num, InetAddress.getLocalHost(), 5588);socket.send(packet);}// 因为没有传输完毕的标志, 随后在 传输入一个标志String string = "传输完毕";DatagramPacket packet = new DatagramPacket(string.getBytes(), string.getBytes().length,InetAddress.getLocalHost(), 5588);socket.send(packet);} catch (SocketException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {if(socket!= null){socket.close();}if(fis!=null){try {fis.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
}

接收端

package com.qf.demo4;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;public class Receive {public static void main(String[] args) {
// 1 DatagramSocket socket = null;FileOutputStream fos =null;try {socket = new DatagramSocket(5588);fos = new FileOutputStream(new File("a.java"));while(true){// 没有结束 循环的标志byte[] buf = new byte[1024];DatagramPacket packet = new DatagramPacket(buf, buf.length);socket.receive(packet);String string = new String(packet.getData(), 0, packet.getLength());if("传输完毕".equals(string)){break;}fos.write(packet.getData(), 0, packet.getLength());fos.flush();}System.out.println("接收方接收数据完毕");} catch (SocketException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {if(socket!= null){socket.close();}if(fos!=null){try {fos.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
}

推荐阅读
author-avatar
单莼de笑脸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有