/* * 找到握手包头 */ private static int FindDownHeaderHandShake(byte[] data, int inlength, out REQTYPE type) { byte[] a = new byte[3]; byte[] key = new byte[] { 0x87, 0x7e, 03 }; for (int i = 0; i < inlength - 3; i++) { Buffer.BlockCopy(data, i, a, 0, 3); if (SameArray(a, key)) { type = REQTYPE.FIND; return(i + 3); } } byte[] key2 = new byte[] { 0x87, 0x7e, 0x13 }; for (int i = 0; i < inlength - 3; i++) { Buffer.BlockCopy(data, i, a, 0, 3); if (SameArray(a, key2)) { type = REQTYPE.LOCALUPDATE; return(i + 3); } } type = REQTYPE.NONE; return(-1); }
public int SendRequest(REQTYPE type, byte[] value) { byte[] request = Packrequest(type, value); dumpdata(request, request.Length, "request"); int i = SendData(request); //sp1.ClosePort(); return(i); }
/* * 解压缩握手包 */ public static byte[] UnpackHandShake(byte[] data, out REQTYPE type) { byte[] result = new byte[2]; int loc = FindDownHeaderHandShake(data, data.Length, out type); if (loc > 0 && type != REQTYPE.NONE) { result[0] = data[loc]; result[1] = data[loc + 1]; } else { return(null); } return(result); }
//打包请求数据 public static byte[] Packrequest(REQTYPE type, byte[] value) { byte[] returnvalue = new byte[7]; returnvalue[0] = upheader[0]; returnvalue[1] = upheader[1]; returnvalue[2] = upheader[2]; switch (type) { case REQTYPE.ERROR: returnvalue[3] = 0x15; returnvalue[4] = 0x00; returnvalue[5] = 0x00; break; case REQTYPE.FIND: returnvalue[3] = 0x25; returnvalue[4] = value[0]; returnvalue[5] = value[1]; break; case REQTYPE.DATA: returnvalue[3] = 0x35; returnvalue[4] = value[0]; returnvalue[5] = value[1]; break; case REQTYPE.VERSION: returnvalue[3] = 0x45; returnvalue[4] = value[0]; returnvalue[5] = value[1]; break; } returnvalue[6] = CRCSUM(returnvalue, 6); return(returnvalue); }