示例#1
0
        /// <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);
        }
示例#2
0
        /// <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;
            }
        }