Java发送UDP包客户端的简单实现UdpClientUtils

前言

公司某项目需要对接UDP服务器,前置步奏成功之后,发送UDP报文给对应应用服务器。于是有了以下的功能。

工具准备

在这里插入图片描述
需要一个【TCP/UDP端口调试工具 SocketTool V4.0 绿色版】
https://www.jb51.net/softs/390595.html

代码SHOW

话不多说,直接就是干

package org.microservice.tcbj.yytsg.questionnaire.util;

import lombok.extern.slf4j.Slf4j;

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

/**
 * UdpClientUtils
 * @author zhengkai.blog.csdn.net
 */
@Slf4j
public class UdpClientUtils {
    private static DatagramSocket clientSocket = null;
    private static InetSocketAddress serverAddress = null;
    /**编码格式,一般gbk或者utf-8*/
    private static String CHARSET_NAME="gbk";
    private static String UDP_URL="192.168.1.222";
    private static Integer UDP_PORT=60000;

    public static DatagramSocket getDatagramSocket()throws SocketException {
        return (clientSocket == null)?new DatagramSocket( ):clientSocket;
    }
    public static InetSocketAddress getInetSocketAddress(String host, int port)throws SocketException {
        return (serverAddress == null)?new InetSocketAddress(host, port):serverAddress;
    }

    public static void send(String host, int port,String msg) throws IOException {
        try {
            log.info("UDP发送数据:"+msg);
            byte[] data = msg.getBytes(CHARSET_NAME);
            DatagramPacket packet = new DatagramPacket(data, data.length, getInetSocketAddress(host,  port));
            getDatagramSocket().send(packet);
            log.info("发送完毕");
            getDatagramSocket().close();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }


    public static void main(String[] args) throws Exception {
        //main方法用于测试
        for (int i = 0; i <5000 ; i++) {
            log.info(">>>>>>第"+i+"次发送UDP");
            UdpClientUtils.send(UdpClientUtils.UDP_URL,UdpClientUtils.UDP_PORT,"开始测试");
            //Thread.sleep(500);
        }

    }

}

控制台输出

在这里插入图片描述
可以看到平均1~2ms就可以成功发送一次UDP请求,那么平均1秒钟可以发送1000个请求,当然,正常业务不会这么频繁,但是作为代码来讲,还是要强大的。
在这里插入图片描述
5000次也很快执行完,也可以根据业务情况进行Thread.Sleep()一下,或者进行二次封装等等,在Controller层或者MQ消息队列或者其他逻辑根据触发的情况去调用。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值