前言
公司某项目需要对接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消息队列或者其他逻辑根据触发的情况去调用。