/// <summary> /// 得到昂科基站心跳,并且响应 /// </summary> /// <param name="buffer">响应流</param> public static byte[] RecLocalTag(byte[] buffer) { if (buffer[2].ToString("X2") == "22") { StringBuilder sb = new StringBuilder(); sb.Append(DateTime.Now.ToString() + " :"); for (int i = 0; i <= 16; i++) { sb.Append(buffer[i].ToString("X2")); sb.Append(" "); } SysHelper.SetNews($"基站同步请求:{sb}"); LogWriter.Info(sb.ToString()); byte[] response = new byte[15]; response[0] = 0x3E; response[1] = 0x0D; response[2] = 0xA2; //响应标准 response[3] = buffer[3]; response[4] = buffer[4]; response[5] = buffer[5]; response[6] = buffer[6]; response[7] = buffer[7]; response[8] = buffer[8]; response[9] = buffer[9]; response[10] = buffer[10]; response[11] = buffer[11]; response[12] = buffer[12]; response[13] = buffer[13]; response[14] = 0x3F; return(response); } return(null); }
/// <summary> /// 模仿卡迪发送 /// </summary> /// <param name="buffer">体温数据param> public static void SendCopyCadi(byte[] buffer) { //模拟Kadi 发送 byte[] node = new byte[6]; //前八位是基站头 //获取卡迪基站模拟,必须空格分割 var tagServer = ConfigurationManager.AppSettings["TagServer"].Split(',')[0].Split(' '); if (tagServer.Count() != 6) { throw new Exception("TagServer 无法模拟,必须是6个字节以空格分隔"); } for (int f = 0; f < 6; f++) { node[f] = (byte)Convert.ToInt32($"0x{tagServer[f]}", 16); } //配置kadi 体温 var tiwen = CheckHelper.CheckZero(buffer) ? new byte[0] : buffer; // 配置基站心跳 var xintiao = ServerXinTiao(node); //基站IP var serverip = ServerIP(node); byte[] response = new byte[node.Length + 2 + tiwen.Length + xintiao.Length + serverip.Length]; Buffer.BlockCopy(node, 0, response, 0, 6); //后两位是本次报文数据量 //1 体温 2 心跳 3 基站IP //一次传输数据超过 256*256 报错 //最少有2条信息 byte[] tiwenC = CheckHelper.ConvertByte((buffer.Count() / 27) + 2); if (tiwenC[2] != 0x00 || tiwenC[3] != 0x00) { throw new Exception("数据传输量过大,系统无法处理"); } response[6] = tiwenC[0]; if (tiwenC.Count() > 1) { response[7] = tiwenC[1]; } else { response[7] = 0x00; } //预防体温数据不存在 if (tiwen.Count() > 0) { Buffer.BlockCopy(tiwen, 0, response, 8, tiwen.Count()); } StringBuilder sb = new StringBuilder(); sb.Clear(); int tagcount = 0; foreach (var no in tiwen) { sb.Append(no.ToString("X2")); sb.Append(" "); tagcount++; if (tagcount == 27) { sb.AppendLine(); tagcount = 0; } } LogWriter.Info("体温 : " + sb); Buffer.BlockCopy(xintiao, 0, response, 8 + tiwen.Count(), 27); Buffer.BlockCopy(serverip, 0, response, 35 + tiwen.Count(), 27); //配置发送体温APP var ipaddress = ConfigurationManager.AppSettings["NurseServer"]; IPAddress ip = IPAddress.Parse(ipaddress.Split(',')[0]); IPEndPoint ipEnd = new IPEndPoint(ip, Convert.ToInt32(ipaddress.Split(',')[1])); //定义套接字类型 Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //尝试连接 try { socket.Connect(ipEnd); socket.Send(response, response.Length, SocketFlags.None); socket.Shutdown(SocketShutdown.Both); socket.Close(); SysHelper.SetNews($"本次发送:{tiwen.Count() / 27}条体温数据"); SysHelper.SetNews($"Send {response.Length} Byte To {ipaddress} Success!"); SysHelper.SetNews($"Disconnect Server"); sb.AppendLine(); } //异常处理 catch (SocketException e) { SysHelper.SetWarning("Fail to connect server"); SysHelper.SetWarning(e.ToString()); // LogWriter.Error(e.ToString()); return; } }