UDP发送文件

接收端

package com.zy.demo2;

import java.io.File;
import java.io.FileOutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class UDPReceive {

    public static void main(String[] args) throws Exception {
        //1创建码头
        DatagramSocket datagramSocket = new DatagramSocket(9999);//双方约定的
        
        
        //2创建集装箱
//        byte b[]=new byte[1024];//空的字节数组
//        DatagramPacket datagramPacket = new DatagramPacket(b, b.length);
//        
//        
//        //3收货
//        datagramSocket.receive(datagramPacket);//线程阻塞!!!(没收到时)        
    
        
        
        //-----------------------------
        byte[] aa = new byte[1];
        
        
        
        FileOutputStream fileOutputStream = new FileOutputStream(new File("E:\\接收的文件\\1.png"));
        
        do {
            DatagramPacket datagramPacket = new DatagramPacket(aa, 0, aa.length);
            if(datagramPacket.getLength()!=1){
                break;
            }
            datagramSocket.receive(datagramPacket);
            System.out.println(datagramPacket.getLength());
            fileOutputStream.write(datagramPacket.getData());
        } while (true);
        System.out.println("接收完成");
        //---------------------------------------
        //4查看货物
//        System.out.println(new String(b));
        
        //5释放资源
        datagramSocket.close();
    }

}

发送端

package com.zy.demo2;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.UnknownHostException;

public class UDPSend {

    public static void main(String[] args) throws Exception {
        
        //1创建码头
        DatagramSocket datagramSocket = new DatagramSocket();
        //2创建集装箱
//        String data="中国食用油";
//        byte[] bytes = data.getBytes();
        
        
        //3发送数据
        //根据名字获取主机(机器互联)
        InetAddress byName = InetAddress.getByName("192.168.219.61");//getByName("127.0.0.1")也可以写ip,不一定非得是主机名
        
//        DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, byName, 9999);    
                
//        datagramSocket.send(datagramPacket);
    
        byte bb[]=new byte[1];//udp容易丢包,为了降低损失,字节数组调整小些
        FileInputStream fileInputStream = new FileInputStream(new File("E:\\13.png"));
        int read = fileInputStream.read(bb);
        
        while(read!=-1){
            DatagramPacket datagramPacket = new DatagramPacket(bb, bb.length, byName, 9999);    
            datagramSocket.send(datagramPacket);
            read = fileInputStream.read(bb);
        }
     
        //4释放资源
        datagramSocket.close();
  
    }

}

程序一个bug:接收端接收完数据时JVM还在运行着,找不到合适的方法让退出JVM

转载于:https://www.cnblogs.com/qfdy123/p/11131842.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Qt中,可以使用QUdpSocket类进行UDP数据报的发送和接收。首先需要了解Socket的概念,它是一个IP地址和一个端口号的组合,用于确定数据传输的路径。以下是使用QUdpSocket进行UDP文件发送的示例代码: 1. 创建一个QUdpSocket对象: QUdpSocket *udpSocket = new QUdpSocket(this); 2. 打开文件并读取数据: QString fileName = "文件路径"; QFile file(fileName); if (!file.open(QIODevice::ReadOnly)) { // 打开文件失败处理 return; } 3. 逐次读取文件内容,并发送数据: while (!file.atEnd()) { QByteArray data = file.read(8000); udpSocket->writeDatagram(data, QHostAddress("目标IP地址"), 目标端口号); } 4. 发送文件结束标志和文件大小: QString endFlag = "end"; // 结束标志 endFlag.append(QString::number(file.size())); // 文件大小 udpSocket->writeDatagram(endFlag.toUtf8(), QHostAddress("目标IP地址"), 目标端口号); 5. 关闭文件和Socket: file.close(); udpSocket->close(); 请根据实际情况替换"文件路径"、"目标IP地址"和目标端口号来正确地发送文件。上述代码会将文件分成小块逐个发送,直到发送完整个文件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [QT发送数据之udp发送文件](https://blog.csdn.net/qq_39181073/article/details/118015662)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [QT UDP数据传输](https://blog.csdn.net/littleappleapple/article/details/103765757)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值