UDP读取发送工具类

目录

前言

一、udp是什么?

二、使用步骤

1.UDP接收工具类

2.UDP发送工具类

3.UDP发送接收调用示例

总结

 


前言

工作中遇到UDP数据的接收与发送工具类,记录下以便后续有需要使用。


一、udp是什么?

UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。

由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。注意:UDP协议是不可靠的。

二、使用步骤

1.UDP接收工具类

代码如下:

package com.datafactory.utils;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

/**
 * udp接受工具类
 */
public class UDPRev {

    private DatagramSocket server;
    private DatagramPacket packet;
    private byte[] b;

    /**
     * @Description 构造接收udp的同时设置接收端口号
     * @param: revPort
     * @return null
     * @throws
     **/
    public UDPRev(int revPort){
        super();
        try {
            this.server = new DatagramSocket(revPort);
        } catch (SocketException e) {
            e.printStackTrace();
        }
        System.out.println("UDP接收已启动,正在监听端口"+revPort);
    }

    //持续接收udp端口发送过来的数据
    public byte[] receiveData(){
        b = new byte[1024];
        int len=0;
        packet = new DatagramPacket(b,b.length);
        try {
            server.receive(packet);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return packet.getData();
    }
}

2.UDP发送工具类

代码如下:

package com.datafactory.utils;

import java.net.*;

/**
 * udp发送工具类 每次发送都需要重新创建一个发送udp的对象
 */
public class UDPSend {

    /**
     * 发送端口
     */
    private int sendPort;
    /**
     * 发送ip
     */
    private String sendIP;
    /**
     * 发送使用的客户端对象
     **/
    private DatagramSocket client;

    //创建发送端Socket对象
    public UDPSend(int sendPort,String sendIP){
        super();
        this.sendPort = sendPort;
        this.sendIP = sendIP;
        try {
            client = new DatagramSocket(sendPort);
        } catch (SocketException e) {
            e.printStackTrace();
        }
        System.out.println("UDP发送端已启动,发送端口:"+sendPort+",发送ip:"+sendIP);
    }

    //发送数据包
    public void send(byte[] sendMessage){
        //创建数据并打包
        int length = sendMessage.length;
        try {
            InetAddress ip = InetAddress.getByName(sendIP);
            //根据自己主机的ip地址或者主机名
            DatagramPacket dp = new DatagramPacket(sendMessage,length,ip,sendPort);
            //发送数据
            client.send(dp);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

}

3.UDP发送接收调用示例

持续接收UDP数据代码如下:

UDPRev udpRev = new UDPRev(6000);
while(true){
    //接受udp数据
    byte[] udpData = udpRev.receiveData();
    //将接收到的数据做处理

}

发送UDP数据代码如下:

byte[] udpData = new String("123456").getBytes();
UDPSend udpSend = new UDPSend(6001,"192.168.0.1");
udpSend.send(udpData);

总结

UDP的接收需要持续不断的接收,每个接收端口都需要重新创建一个接收UDP工具类对象对数据进行接收,不可以重复使用对象。

UDP发送时也一样,发送到不同的端口时需要创建新的发送工具类对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值