예제 #1
0
        public string SetSendDataStr(string message, int id)
        {
            string r = "无效操作";

            //首先验证数据是否符合规范:解析数量、查看是否都是数字,id是否存在
            var rows = YingHeXinList.Where(o => o.ID == id).ToList();

            if (rows.Count > 0)
            {
                //查到有ID
                string[] sArray = message.Split(',');                                                            //这是当前想要发的数据

                string   Sstrs       = PublicClassRule.GetValues(rows[0].HR_Make_ID.ToString(), "tcpSendBytes"); //配置中要发送数据类型[这是正确的数据]
                string[] sRightArray = Sstrs.Split(',');

                if (sArray.Length == sRightArray.Length)
                {
                    //与配置项相符,再验证数据是否与要求类型相符
                    try
                    {
                        byte[] sendByteDataList = PublicClassRule.MakeDataToBytes(rows[0].HR_Make_ID, message);

                        if (sendByteDataList == null)
                        {
                            //无效
                            r = "数据无效";
                        }
                        else
                        {
                            //可以记录,发送
                            rows[0].SendData = message;
                            rows[0].Web_Heart++;//web心跳
                            r = "发送数据变更成功";
                        }
                    }
                    catch (Exception)
                    {
                        r = "数据转换不正确,可能有的数据超过类型限制。";
                    }
                }
                else
                {
                    r = "Message字符结构不正确,请正确输入正确数量的数据。";
                }
            }
            else
            {
                r = "ID无效";
            }


            return(r);
        }
예제 #2
0
        private void RecvData(object sender, NetEventArgs e)
        {
            #region 接收数据应对措施

            int id = MakeDataTCP(e);//查询ID
            if (id == -1)
            {
                //不处理
                //【注意】程序中写了。如果返回值是-1说明没查到,此链接会被关闭。所以要处理不等于-1的即可
            }
            else
            {
                //处理收到的数据
                var      row = YingHeXinList.Where(o => o.ID == id).ToList();
                TimeSpan ts  = DateTime.Now - row[0].TCP_OK_Start;
                row[0].TCP_GoOn_Time = string.Format("{0}天{1}小时{2}分{3}秒 {4}", ts.Days, ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds);

                //int length = PublicClassTools.Read_Setting_Length(row[0].HR_Make_ID, "tcpReceiveBytes");
                //根据这个长度处理数据
                List <double> receiveDataList = PublicClassRule.MakebytesToData(e.Client.RecvDataBuffer, row[0].HR_Make_ID);
                //把数据放置在对应的位置上
                string rDataStr = "";
                for (int i = 0; i < receiveDataList.Count; i++)
                {
                    rDataStr = string.Format("{0},{1}", rDataStr, receiveDataList[i]);
                }
                //循环结束,最前方都会去掉
                if (rDataStr.StartsWith(","))
                {
                    rDataStr = rDataStr.Substring(1);
                }
                row[0].ReceivedData = rDataStr;
                row[0].ReceivedTotalCount++;

                #region //补充:为了单一模型
                MakeSingleData(true, id, rDataStr, row[0].TCP_GoOn_Time);


                #endregion

                //下面该回数据了,有来不往非君子。

                //首先验证一下要发送的数据 2019年12月10日11:42:46
                int slength = PublicClassTools.Read_Setting_Length(row[0].HR_Make_ID, "tcpSendBytesNames");//协议中要发送的数据长度
                if (row[0].SendData == null)
                {
                    //如果是空,给一个初始值

                    MakeSendDataStr(row, slength);
                }
                //再验证一下,这个数据的数量是不是正确
                string[] sCount = row[0].SendData.Split(',');
                if (sCount.Length != slength)
                {
                    //长度不正确
                    MakeSendDataStr(row, slength);
                }
                else
                {
                    //长度正确
                }

                //现在有要发送的数据了。开始制作byte[]
                byte[] sendByteDataList = PublicClassRule.MakeDataToBytes(row[0].HR_Make_ID, row[0].SendData);
                if (sendByteDataList == null)
                {
                    //没数据可发
                }
                else
                {
                    //发送数据异常
                    SendData111(sendByteDataList, e.Client);
                    row[0].SendTotalCount++;
                    if (row[0].CreateType == ShiYanCreateType.New || true) //先不管了,不管怎么用,都记录吧
                    {
                        //新建的试验记录日志
                        PublicClassRule.MakeLog(row[0]);//写tcp通讯的命令和返回值日志
                    }
                    else
                    {
                        //复盘自己和别人的试验,不做日志记录
                    }
                }
            }

            /// <summary>
            /// 发送数据
            /// </summary>
            /// <param name="_data"></param>
            /// <param name="sessionClient"></param>
            void SendData111(byte[] _data, Session sessionClient)
            {
                svr.Send(sessionClient, _data);

                string byteStr = "";

                for (int i = 0; i < _data.Length; i++)
                {
                    byteStr = byteStr + " " + _data[i].ToString("X2");
                }

                string info = string.Format("发送数据:\tOmegaS Send data:\t{0} \tTo:{1}.", byteStr, sessionClient);

                Console.WriteLine(info);
                Console.Write(">");
            }

            #endregion
        }