From 568480cfab8ebea1d25bb182b740e6957e0e5a73 Mon Sep 17 00:00:00 2001
From: chenyc <501753378@qq.com>
Date: 星期二, 03 十二月 2024 10:25:07 +0800
Subject: [PATCH] 优化
---
electron/main/deviceClientSocket.ts | 52 ++++++++++++++++++++++++++++++++++++----------------
1 files changed, 36 insertions(+), 16 deletions(-)
diff --git a/electron/main/deviceClientSocket.ts b/electron/main/deviceClientSocket.ts
index 81a409e..940cfb0 100644
--- a/electron/main/deviceClientSocket.ts
+++ b/electron/main/deviceClientSocket.ts
@@ -140,28 +140,27 @@
if (!this.client.destroyed) {
// 原始字符串
const originalString = str;
- // 将字符串转换为 Buffer
- const buffer = Buffer.from(originalString);
- console.log(buffer)
- console.log(buffer.length)
- // 获取校验码
- const checksum = calculateChecksum2(buffer);
- // 将校验码转换为两位十六进制字符串
- const checksumHex = checksum.toString(16).padStart(2, '0').toUpperCase();
- // 输出结果
- console.log(`Checksum (Hexadecimal): ${checksumHex}`);
- // 将校验码追加到原始 Buffer
- const zuijia = Buffer.concat([buffer, Buffer.from([checksum])]);
- console.log('----')
- console.log(zuijia[0], zuijia[zuijia.length - 1])
- console.log('33333')
+ // 计算CRC-16校验码
+ const crcResult = crc16(originalString);
+ // 将结果转换为字节数组
+ const crcBytes = [
+ (crcResult >> 8) & 0xFF, // 高字节
+ crcResult & 0xFF // 低字节
+ ];
+ // 创建包含校验码的数据包(先转换为Buffer)
+ const messageBuffer = Buffer.concat([
+ Buffer.from(originalString), // 原始数据部分
+ Buffer.from(crcBytes), // CRC校验码部分
+ Buffer.from([0x0D,0x0A])
+ ]);
+ console.log('ping hao d jiao yan ma',messageBuffer.length)
if( this.waitingForAck){
console.log('londion-------zhong')
const listData = { ip: this.host, prot: this.port, data: '正在等待应答中,会自动尝试10秒后发送' }
fanhuiCommLog(listData)
}else{
console.log('fa song xue ya shu ju ')
- this.sendAndAwaitAck(zuijia)
+ this.sendAndAwaitAck(messageBuffer)
}
} else {
return
@@ -340,6 +339,27 @@
// 如果需要,可以对 sum 取模以适应单个字节
return sum & 0xFF;
}
+/**
+ * CRC-16-CCITT(多项式 0x1021)来计算校验码。
+ */
+function crc16(data) {
+ let crc = 0xFFFF; // 初始值
+ let polynomial = 0x1021; // 使用的多项式
+ for (let i = 0; i < data.length; i++) {
+ let byte = data.charCodeAt(i);
+ crc ^= byte << 8;
+ for (let j = 0; j < 8; j++) {
+ if ((crc & 0x8000) > 0) {
+ crc = (crc << 1) ^ polynomial;
+ } else {
+ crc = crc << 1;
+ }
+ }
+ crc &= 0xFFFF; // 确保结果为16位
+ }
+
+ return crc >>> 0; // 转换为无符号整数
+}
/**解析数据1 */
function parseData(buf: Uint8Array, index1: number, index2: number, index3: number, index4: number): number {
let data5: number = (buf[index1] << 24) | (buf[index2] << 16) | (buf[index3] << 8) | buf[index4];
--
Gitblit v1.8.0