|
@@ -47,13 +47,19 @@ function bin2String(array) {
|
|
|
function calculateChecksum16bit(code) {
|
|
function calculateChecksum16bit(code) {
|
|
|
let sum = 0;
|
|
let sum = 0;
|
|
|
for (let i = 0; i < code.length; i++) {
|
|
for (let i = 0; i < code.length; i++) {
|
|
|
- sum += code[i]&0xff;
|
|
|
|
|
|
|
+ sum += (code[i])&0xff;
|
|
|
// console.log("sum:"+ sum +",i:"+ code[i] );
|
|
// console.log("sum:"+ sum +",i:"+ code[i] );
|
|
|
}
|
|
}
|
|
|
// 将结果转换为16位二进制字符串
|
|
// 将结果转换为16位二进制字符串
|
|
|
return sum&0xffff;
|
|
return sum&0xffff;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+function bufferToHex (buffer) {
|
|
|
|
|
+ return [...new Uint8Array (buffer)]
|
|
|
|
|
+ .map (b => b.toString (16).padStart (2, "0"))
|
|
|
|
|
+ .join (" ");
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
function stringToByteArray(str) {
|
|
function stringToByteArray(str) {
|
|
|
const encoder = new TextEncoder(); // 创建TextEncoder实例
|
|
const encoder = new TextEncoder(); // 创建TextEncoder实例
|
|
|
const bytes = encoder.encode(str); // 将字符串转换为字节序列
|
|
const bytes = encoder.encode(str); // 将字符串转换为字节序列
|
|
@@ -140,13 +146,14 @@ function pack_send(str) {
|
|
|
console.log("封包前:"+str);
|
|
console.log("封包前:"+str);
|
|
|
|
|
|
|
|
body = str;
|
|
body = str;
|
|
|
- body = stringToByteArray(str);
|
|
|
|
|
- data_len = body.length;
|
|
|
|
|
- data_check = calculateChecksum16bit(body);
|
|
|
|
|
- let headBuf = Buffer.from([0x59, 0x4C, '<', (data_len>>8)&0xff, (data_len>>0)&0xff, (data_check>>8)&0xff, (data_check>>0)&0xff]);
|
|
|
|
|
|
|
+ let data_len = body.length;
|
|
|
|
|
+ let data_check = calculateChecksum16bit(stringToByteArray(body));
|
|
|
|
|
+ // console.log("check:"+data_check);
|
|
|
|
|
+ let headBuf = "YL<" + Buffer.from([(data_len>>8)&0xff, (data_len>>0)&0xff, (data_check>>8)&0xff, (data_check>>0)&0xff]);
|
|
|
let pack_date = headBuf+body
|
|
let pack_date = headBuf+body
|
|
|
ws.send(pack_date);
|
|
ws.send(pack_date);
|
|
|
- console.log("封包后:"+pack_date);
|
|
|
|
|
|
|
+ datArray = stringToByteArray(pack_date);
|
|
|
|
|
+ console.log("封包后:"+bufferToHex(datArray));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function handler_recv(out){
|
|
function handler_recv(out){
|
|
@@ -176,7 +183,8 @@ function handler_recv(out){
|
|
|
// 解包
|
|
// 解包
|
|
|
let RecvBuf = "";
|
|
let RecvBuf = "";
|
|
|
function unpack_recv(data) {
|
|
function unpack_recv(data) {
|
|
|
- console.log("recv " + data.length +":"+ data);
|
|
|
|
|
|
|
+ datArray = stringToByteArray(data);
|
|
|
|
|
+ console.log("接收 " + data.length +": "+ bufferToHex(datArray));
|
|
|
// data添加到全局RecvBuf
|
|
// data添加到全局RecvBuf
|
|
|
if(RecvBuf == ""){
|
|
if(RecvBuf == ""){
|
|
|
RecvBuf = data;
|
|
RecvBuf = data;
|
|
@@ -233,9 +241,9 @@ function unpack_recv(data) {
|
|
|
console.log("校验码成功" );
|
|
console.log("校验码成功" );
|
|
|
|
|
|
|
|
//解析数据
|
|
//解析数据
|
|
|
- let start = index+7;
|
|
|
|
|
- let stop = index+7+data_len;
|
|
|
|
|
- console.log("start:" + start +", stop:"+ stop );
|
|
|
|
|
|
|
+ // let start = index+7;
|
|
|
|
|
+ // let stop = index+7+data_len;
|
|
|
|
|
+ // console.log("start:" + start +", stop:"+ stop );
|
|
|
let out = RecvBuf.slice(index+7,index+7+data_len);
|
|
let out = RecvBuf.slice(index+7,index+7+data_len);
|
|
|
|
|
|
|
|
// 处理out数据
|
|
// 处理out数据
|