49 lines
1.6 KiB
Java
49 lines
1.6 KiB
Java
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;
|
||
}
|
||
}
|