1.socket获取16进制报文并解析成16进制字符
public static String byte2String(byte b){
return String.format("%02x ",b);
}
public static void main(String[] args) throws Exception {
byte[] byteArr = new byte[1024];
StringBuilder sb = new StringBuilder();
for (int i = 0; i < byteArr.length; i++) {
sb.append(byte2String(byteArr[i]));
}
}
2.DatagramPacket解析数据包:
public static ConcurrentLinkedQueue<byte[]> msgList = new ConcurrentLinkedQueue<>();
for (; ; ) {
byte[] buf = new byte[100];
// 解析数据包
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
byte[] dataArr = new byte[packet.getLength()];
//获取报文真实数据长度,并将报文放入dataArr
System.arraycopy(buf,0,dataArr,0,dataArr.length);
String ip = packet.getAddress().getHostAddress();
buf = packet.getData();
String data = new String(buf, 0, packet.getLength());
logger.info("收到ip为{}发来的消息,字符数据为,{},字符长度为,{}", ip,data,packet.getLength());
if (dataArr.length>0) {
msgList.add(dataArr);
}
}
3.ftp将连接放回连接池前需要
//传输完成后必须以完成文件传输并检查其返回值以验证下载是否实际上已成功完成。
if(ftpClient.completePendingCommand()){
//验证成功后的逻辑,获取将连接放回连接池
}