package com.ruoyi.fuzhou.utils.hj1239;
|
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.net.Socket;
|
|
/**
|
* 数据接收解析
|
*/
|
public class DataReceiver {
|
public static String receiveData(String serverIp, int serverPort) throws IOException {
|
try (Socket socket = new Socket(serverIp, serverPort);
|
InputStream inputStream = socket.getInputStream()) {
|
byte[] buffer = new byte[1024];
|
int bytesRead = inputStream.read(buffer);
|
byte[] receivedData = new byte[bytesRead];
|
System.arraycopy(buffer, 0, receivedData, 0, bytesRead);
|
return parseData(receivedData);
|
}
|
}
|
|
private static String parseData(byte[] data) {
|
// 检查起始符和结束符
|
if (data[0] != ProtocolDataEncoder.START_FLAG || data[data.length - 1] != ProtocolDataEncoder.END_FLAG) {
|
throw new IllegalArgumentException("Invalid data frame");
|
}
|
// 提取数据段
|
byte[] dataSegment = new byte[data.length - 2];
|
System.arraycopy(data, 1, dataSegment, 0, dataSegment.length);
|
// 校验校验码
|
byte receivedChecksum = data[data.length - 2];
|
byte calculatedChecksum = ProtocolDataEncoder.calculateChecksum(dataSegment);
|
if (receivedChecksum != calculatedChecksum) {
|
throw new IllegalArgumentException("Checksum error");
|
}
|
return new String(dataSegment);
|
}
|
}
|