package com.nis.util; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class UdpUtils { private static final Logger logger = LoggerFactory.getLogger(TextFormatUtils.class); public static String send(String sendIp,Integer slot,int timeout) { String rlt = ""; DatagramSocket ds = null; try { ds = new DatagramSocket();//通过DatagramSocket对象创建udp服务 ds.setSoTimeout(timeout); // String line = "00 06 0502 00 00 68c2"; //发送的16进制字符串 String slotStr = slot+""; if(slot<10) { slotStr = "0"+slotStr; } String line = "00 "+slotStr+" 0502 00 00"; //发送的16进制字符串 byte[] buf = HexUtils.hexStringToByteArray(line); DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName(sendIp),6800);//发送至指定IP,指定端口 ds.send(dp);//通过send方法将数据包发送出去 //定义数据包,用于存储数据 byte[] buf2 = new byte[8]; DatagramPacket dp2 = new DatagramPacket(buf2,buf2.length); ds.receive(dp2);//通过服务的receive方法将收到数据存入数据包中,receive()为阻塞式方法 //通过数据包的方法获取其中的数据 String ip = dp2.getAddress().getHostAddress(); System.out.println(ip+"::"+HexUtils.bytesToHexString(buf2)); rlt = HexUtils.bytesToHexString(buf2); }catch (Exception e) { logger.error(sendIp+"::"+slot+">>"+e.getMessage()); }finally { if(ds!=null) { ds.close();//关闭资源 } } return rlt; } }