Beispiel #1
0
        public void RevceiveOrCreate(object clientSocke)
        {
            Socket client = clientSocke as Socket;

            IPEndPoint clientPoint = (IPEndPoint)client.RemoteEndPoint;
            //获得文件名
            string SendFileName = Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));
            //获得包大小
            string bagSize = Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));
            //获得包总数
            int bagCount;

            int.TryParse(Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client)), out bagCount);
            //获得最后一个包的大小
            string bagLast = Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));

            Console.WriteLine("文件名:" + SendFileName + "包大小:" + bagSize + "包总数:" + bagCount + "最后一个包的大小:" + bagLast);
            //string FullPath = Path.Combine(Environment.CurrentDirectory, SendFileName);
            string FullPath = @"/Users/mac/Desktop/aaa.mp4";

            using (FileStream fileStream = new FileStream(FullPath, FileMode.Create, FileAccess.Write))
            {
                int SendCount = 0;

                while (true)
                {
                    byte[] data = TransferFiles.ReceiveVarData(client);
                    //byte[] data = TransferFiles.ReceiveData(client,(int)fileStream.Length);

                    if (data.Length == 0)
                    {
                        break;
                    }
                    else
                    {
                        SendCount++;
                        fileStream.Write(data, 0, data.Length);
                    }
                }
                // client.Send(Encoding.Unicode.GetBytes("接收完毕"));

                client.Close();
            }

            Console.WriteLine(SendFileName + "接收完毕");
        }
Beispiel #2
0
        /// <summary>
        /// 执行指标测试指令
        /// </summary>
        /// <param name="clientSocket"></param>
        private static void Excute(object clientSocket)
        {
            Socket client = clientSocket as Socket;

            byte[] ID_buffer = new byte[40];
            try
            {
                UpdateLog.ClearLog();
                Thread.Sleep(100);
                while (true)
                {
                    if (client.Available > 0)
                    {
                        UpdateLog.Log("➤ 查询参数");
                        byte[] res = TransferFiles.ReceiveVarData(client);
                        string Str_NameAndMission = Encoding.UTF8.GetString(res);
                        string stationname = "", Commend = "", st = "", ed = "";
                        if (Str_NameAndMission != "GetConfig" && Str_NameAndMission != "SetConfig")
                        {
                            string[] array = Str_NameAndMission.Split("#".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                            UpdateLog.Log("站名#" + array[0]);
                            UpdateLog.Log("指令#" + array[1]);
                            stationname = array[0];
                            Commend     = array[1];
                            st          = array[2];
                            ed          = array[3];
                            UpdateLog.Log("时间#" + array[2].Replace("#", " ") + " 至 " + array[3].Replace("#", " "));
                        }
                        else
                        {
                            //若是【获去配置】或【修改配置】则只包含命令
                            Commend = Str_NameAndMission;
                        }
                        switch (Commend)
                        {
                            #region 基础数据
                        case "BaseCount":
                            try
                            {
                                try
                                {
                                    UpdateLog.Log("➤ 列车总数");
                                    int total = 0;
                                    foreach (LineInfo li in LineList)
                                    {
                                        int tmp = IndexTest.GetTrainNum(st, ed, li.lid.ToString());
                                        total += tmp;
                                        UpdateLog.Log("线路" + li.lid + "#" + tmp);
                                    }
                                    UpdateLog.Log("列车总数#" + (total));
                                    UpdateLog.Log("数据来源#Train表");
                                }
                                catch (Exception ex) { UpdateLog.Error("列车总数#" + ex.Message); }
                                try
                                {
                                    UpdateLog.Log("➤ 各类列车数量");
                                    foreach (LineInfo li in LineList)
                                    {
                                        DataTable tmp = IndexTest.GetTyainNumByTrainType(st, ed, li.lid.ToString());
                                        UpdateLog.Log("线路" + li.lid);
                                        if (tmp != null && tmp.Rows.Count > 0)
                                        {
                                            for (int i = 0; i < tmp.Rows.Count; i++)
                                            {
                                                UpdateLog.Log(tmp.Rows[i][0].ToString().Replace("NoTrainType", "列车类型为空") + "#" + tmp.Rows[i][1].ToString());
                                            }
                                        }
                                    }
                                    UpdateLog.Log("数据来源#Train表");
                                }
                                catch (Exception ex) { UpdateLog.Error("各类列车数量#" + ex.Message); }
                                try
                                {
                                    UpdateLog.Log("➤ 车厢总数");
                                    int total = 0;
                                    foreach (LineInfo li in LineList)
                                    {
                                        int tmp = IndexTest.GetCarNumByPeriod(st, ed, li.lid.ToString());
                                        UpdateLog.Log("线路" + li.lid + "#" + tmp);
                                        total += tmp;
                                    }
                                    UpdateLog.Log("车厢总数#" + total);
                                    UpdateLog.Log("数据来源#TrainDetail表");
                                }
                                catch (Exception ex) { UpdateLog.Error("车厢总数#" + ex.Message); }
                                try
                                {
                                    UpdateLog.Log("➤ 各类车厢数量");
                                    foreach (LineInfo li in LineList)
                                    {
                                        UpdateLog.Log("线路" + li.lid);
                                        DataTable tmp = IndexTest.GetCarNumByCarKind(st, ed, li.lid.ToString());
                                        if (tmp != null && tmp.Rows.Count > 0)
                                        {
                                            for (int i = 0; i < tmp.Rows.Count; i++)
                                            {
                                                UpdateLog.Log(tmp.Rows[i]["vehicletype"].ToString() + "#" + tmp.Rows[i]["KindNum"].ToString());
                                            }
                                        }
                                    }
                                    UpdateLog.Log("数据来源#TrainDetail表");
                                }
                                catch (Exception ex) { UpdateLog.Error("各类车厢数量#" + ex.Message); }
                                try
                                {
                                    UpdateLog.Log("➤ 图像总数");
                                    int total = 0;
                                    foreach (LineInfo li in LineList)
                                    {
                                        int tmp = IndexTest.GetFileNum(st, ed, Common.Default.Path_Pic + li.FolderName + "\\", ".jpg");
                                        total += tmp;
                                        UpdateLog.Log("线路" + li.lid + "#" + tmp);
                                    }
                                    UpdateLog.Log("图像总数#" + total);
                                    UpdateLog.Log("数据来源#.jpg文件个数");
                                }
                                catch (Exception ex) { UpdateLog.Error("图像总数#" + ex.Message); }
                                try
                                {
                                    UpdateLog.Log("➤ 走行部图像总数");
                                    int total = 0;
                                    foreach (LineInfo li in LineList)
                                    {
                                        int tmp = IndexTest.GetFileNum(st, ed, Common.Default.Path_ZXPic + li.FolderName + "\\", ".jpg");
                                        total += tmp;
                                        UpdateLog.Log("线路" + li.lid + "#" + tmp);
                                    }
                                    UpdateLog.Log("走行部图像总数#" + total);
                                    UpdateLog.Log("数据来源#.jpg文件个数");
                                }
                                catch (Exception ex) { UpdateLog.Error("图像总数#" + ex.Message); }
                                try
                                {
                                    UpdateLog.Log("➤ 视频总数");
                                    int total = 0;
                                    foreach (LineInfo li in LineList)
                                    {
                                        int tmp = IndexTest.GetFileNum(st, ed, Common.Default.Path_Video + li.FolderName + "\\", ".mp4");
                                        total += tmp;
                                        UpdateLog.Log("线路" + li.lid + "#" + tmp);
                                    }
                                    UpdateLog.Log("视频总数#" + total);
                                    UpdateLog.Log("数据来源#.mp4文件个数");
                                }
                                catch (Exception ex) { UpdateLog.Error("视频总数#" + ex.Message); }
                                try
                                {
                                    UpdateLog.Log("➤ 声音总数");
                                    int total = 0;
                                    foreach (LineInfo li in LineList)
                                    {
                                        int tmp = IndexTest.GetFileNum(st, ed, Common.Default.Path_Voice + li.FolderName + "\\", ".aac");
                                        total += tmp;
                                        UpdateLog.Log("线路" + li.lid + "#" + tmp);
                                    }
                                    UpdateLog.Log("声音总数#" + total);
                                    UpdateLog.Log("数据来源#.aac文件个数");
                                }
                                catch (Exception ex) { UpdateLog.Error("声音总数#" + ex.Message); }
                                try
                                {
                                    UpdateLog.Log("➤ 所有预警总数");
                                    decimal total = 0;
                                    foreach (LineInfo li in LineList)
                                    {
                                        decimal tmp = IndexTest.GetAlarmNum(st, ed, li.lid.ToString(), null, null, null);
                                        UpdateLog.Log("线路" + li.lid + "#" + tmp);
                                        total += tmp;
                                    }
                                    UpdateLog.Log("预警总数#" + total);
                                }
                                catch (Exception ex) { UpdateLog.Error("预警总数#" + ex.Message); }
                                try
                                {
                                    UpdateLog.Log("➤ 各类别预警数");
                                    int sum_Alarm = 0, sum_Fail = 0;
                                    foreach (LineInfo li in LineList)
                                    {
                                        UpdateLog.Log("线路" + li.lid + "");
                                        UpdateLog.Log("===正常报警:");
                                        DataTable alarm = IndexTest.GetAlarmNum(st, ed, li.lid.ToString(), true);
                                        if (alarm != null && alarm.Rows.Count > 0)
                                        {
                                            for (int i = 0; i < alarm.Rows.Count; i++)
                                            {
                                                UpdateLog.Log(alarm.Rows[i]["ProblemType"].ToString() + "#" + alarm.Rows[i]["AlarmNum"].ToString());
                                                sum_Alarm += int.Parse(alarm.Rows[i]["AlarmNum"].ToString());
                                            }
                                        }
                                        UpdateLog.Log("===检测失败:");
                                        DataTable fail = IndexTest.GetAlarmNum(st, ed, li.lid.ToString(), false);
                                        if (fail != null && fail.Rows.Count > 0)
                                        {
                                            for (int i = 0; i < fail.Rows.Count; i++)
                                            {
                                                UpdateLog.Log(fail.Rows[i]["ProblemType"].ToString() + "#" + fail.Rows[i]["AlarmNum"].ToString());
                                                sum_Fail += int.Parse(fail.Rows[i]["AlarmNum"].ToString());
                                            }
                                        }
                                    }
                                    UpdateLog.Log("【报警总数】#" + sum_Alarm);
                                    UpdateLog.Log("【检测失败】#" + sum_Fail);
                                }
                                catch (Exception ex) { UpdateLog.Error("各类别预警数" + ex.Message); }
                            }
                            catch (Exception ex)
                            {
                                UpdateLog.Error("基础数据异常#" + ex.Message);
                            }
                            break;
                            #endregion

                            #region 丢文件
                        case "MissFiles":
                            try
                            {
                                UpdateLog.Log("➤ 丢文件检测");
                                foreach (LineInfo li in LineList)
                                {
                                    UpdateLog.Log("=====【线路" + li.lid + "】=====");
                                    int Count_Dir;
                                    List <DirectoryInfo> list_MissingIndex;
                                    List <FileInfo>      list_MissingPics;
                                    IndexTest.CountMissingPics(st, ed, Common.Default.Path_Pic + li.FolderName + "\\", out Count_Dir, out list_MissingIndex, out list_MissingPics);
                                    UpdateLog.Log("共检测了文件夹#" + Count_Dir);
                                    UpdateLog.Log("共丢失Index#" + list_MissingIndex.Count);
                                    UpdateLog.Log("共丢失图片#" + list_MissingPics.Count);
                                    if (list_MissingIndex.Count > 0)
                                    {
                                        UpdateLog.Log("===Index丢失明细===");
                                        foreach (DirectoryInfo dir in list_MissingIndex)
                                        {
                                            UpdateLog.Log("Index丢失#" + dir.FullName);
                                        }
                                    }
                                    if (list_MissingPics.Count > 0)
                                    {
                                        UpdateLog.Log("===图片丢失明细===");
                                        foreach (FileInfo fi in list_MissingPics)
                                        {
                                            UpdateLog.Log("图片丢失#" + fi.FullName);
                                        }
                                    }
                                }
                            }
                            catch (Exception ex) { UpdateLog.Error(ex.Message); }
                            try
                            {
                                UpdateLog.Log("➤ 丢文件检测(走形)");
                                foreach (LineInfo li in LineList)
                                {
                                    UpdateLog.Log("=====【线路" + li.lid + "】=====");
                                    int Count_Dir;
                                    List <DirectoryInfo> list_MissingIndex;
                                    List <FileInfo>      list_MissingPics;
                                    IndexTest.CountMissingPics(st, ed, Common.Default.Path_ZXPic + li.FolderName + "\\", out Count_Dir, out list_MissingIndex, out list_MissingPics);
                                    UpdateLog.Log("共检测了文件夹#" + Count_Dir);
                                    UpdateLog.Log("共丢失Index#" + list_MissingIndex.Count);
                                    UpdateLog.Log("共丢失图片#" + list_MissingPics.Count);
                                    if (list_MissingIndex.Count > 0)
                                    {
                                        UpdateLog.Log("===Index丢失明细===");
                                        foreach (DirectoryInfo dir in list_MissingIndex)
                                        {
                                            UpdateLog.Log("Index丢失#" + dir.FullName);
                                        }
                                    }
                                    if (list_MissingPics.Count > 0)
                                    {
                                        UpdateLog.Log("===图片丢失明细===");
                                        foreach (FileInfo fi in list_MissingPics)
                                        {
                                            UpdateLog.Log("图片丢失#" + fi.FullName);
                                        }
                                    }
                                }
                            }
                            catch (Exception ex) { UpdateLog.Error(ex.Message); }
                            break;
                            #endregion

                            #region 入库率
                        case "DBIndex":
                            try
                            {
                                UpdateLog.Log("➤ 列车实时入库率");
                                double[] all = IndexTest.GetTrainInfoImportDataByFlagRatio(st, ed, "SOCKET", null);
                                foreach (LineInfo li in LineList)
                                {
                                    double[] tmp = IndexTest.GetTrainInfoImportDataByFlagRatio(st, ed, "SOCKET", li.lid.ToString());
                                    UpdateLog.Log("线路" + li.lid + "入库率#" + tmp[0] + "/" + tmp[1] + " * 100 = " + (tmp[1] != 0 ? Math.Round(tmp[0] / tmp[1], 4, MidpointRounding.AwayFromZero) * 100 : 0) + "%");
                                }
                                UpdateLog.Log("实时入库率(Socket)#" + all[0] + "/" + all[1] + " * 100 = " + (all[1] != 0 ? Math.Round(all[0] / all[1], 4, MidpointRounding.AwayFromZero) * 100 : 0) + "%");
                                UpdateLog.Log("公式#实时入库列车数/过车总数*100%");
                            }
                            catch (Exception ex) { UpdateLog.Error("热轮总数#" + ex.Message); }
                            try
                            {
                                UpdateLog.Log("➤ 列车补入库率");
                                double[] all = IndexTest.GetTrainInfoImportDataByFlagRatio(st, ed, "INDEX", null);
                                foreach (LineInfo li in LineList)
                                {
                                    double[] tmp = IndexTest.GetTrainInfoImportDataByFlagRatio(st, ed, "INDEX", li.lid.ToString());
                                    UpdateLog.Log("线路" + li.lid + "入库率#" + tmp[0] + "/" + tmp[1] + " * 100 = " + (tmp[1] != 0 ? Math.Round(tmp[0] / tmp[1], 4, MidpointRounding.AwayFromZero) * 100 : 0) + "%");
                                }
                                UpdateLog.Log("补入库率(Index)#" + all[0] + "/" + all[1] + " * 100 = " + (all[1] != 0 ? Math.Round(all[0] / all[1], 4, MidpointRounding.AwayFromZero) * 100 : 0) + "%");
                                UpdateLog.Log("公式#Index补入库列车数/过车总数*100%");
                            }
                            catch (Exception ex) { UpdateLog.Error("入库率#" + ex.Message); }
                            break;
                            #endregion

                            #region 热轮指标
                        case "HotwheelIndex":
                            try
                            {
                                UpdateLog.Log("➤ 热轮总数");
                                int total = 0;
                                foreach (LineInfo li in LineList)
                                {
                                    int tmp = IndexTest.GetFileNum(st, ed, Common.Default.Path_Hotwheel + li.FolderName + "\\", ".HotWheel");
                                    total += tmp;
                                    UpdateLog.Log("线路" + li.lid + "#" + tmp);
                                }
                                UpdateLog.Log("热轮总数#" + total);
                                UpdateLog.Log("数据来源#.HotWheel文件个数");
                            }
                            catch (Exception ex) { UpdateLog.Error("热轮总数#" + ex.Message); }
                            try
                            {
                                UpdateLog.Log("➤ 热轮接入率");
                                double[] total = new double[2];
                                foreach (LineInfo li in LineList)
                                {
                                    try
                                    {
                                        double[] tmp = IndexTest.GetHotWheelFileStatisicsRatio(st, ed, li.FolderName);
                                        UpdateLog.Log("线路" + li.lid + "接入率#" + tmp[0] + "/" + tmp[1] + " * 100 = " + (tmp[1] != 0 ? Math.Round(tmp[0] / tmp[1], 2, MidpointRounding.AwayFromZero) * 100 : 0) + "%");
                                        total[0] += tmp[0]; total[1] += tmp[1];
                                    }
                                    catch (Exception e) { UpdateLog.Error(e.Message); }
                                }
                                UpdateLog.Log("热轮接入率#" + total[0] + "/" + total[1] + " * 100 = " + (total[0] != 0 ? Math.Round((total[0]) / (total[1]), 2, MidpointRounding.AwayFromZero) * 100 : 0) + "%");
                                UpdateLog.Log("公式#接入热轮文件数/过车总数*100%");
                            }
                            catch (Exception ex) { UpdateLog.Error("热轮接入率#" + ex.Message); }
                            try
                            {
                                UpdateLog.Log("➤ 热轮匹配率");
                                double[] total = new double[2];
                                foreach (LineInfo li in LineList)
                                {
                                    try
                                    {
                                        double[] tmp = IndexTest.GetHotWheelFileMatchRatio(st, ed, li.FolderName);
                                        UpdateLog.Log("线路" + li.lid + "匹配率#" + tmp[0] + "/" + tmp[1] + " * 100 = " + (tmp[1] != 0 ? Math.Round(tmp[0] / tmp[1], 2, MidpointRounding.AwayFromZero) * 100 : 0) + "%");
                                        total[0] += tmp[0]; total[1] += tmp[1];
                                    }
                                    catch (Exception e) { UpdateLog.Error(e.Message); }
                                }
                                UpdateLog.Log("热轮匹配率#" + total[0] + "/" + total[1] + " * 100 = " + (total[0] != 0 ? Math.Round((total[0]) / (total[1]), 2, MidpointRounding.AwayFromZero) * 100 : 0) + "%");
                                UpdateLog.Log("公式#匹配成功的热轮文件数/接入的热轮文件数*100%");
                            }
                            catch (Exception ex) { UpdateLog.Error("热轮匹配率#" + ex.Message); }
                            break;
                            #endregion

                            #region 确报指标
                        case "QBIndex":
                            try
                            {
                                UpdateLog.Log("➤ 确报总数");
                                int total = 0;
                                foreach (LineInfo li in LineList)
                                {
                                    DataTable tmpdt = IndexTest.GetAllQBNumByPeriod(st, ed, li.lid.ToString());
                                    int       tmp   = 0;
                                    int.TryParse(tmpdt.Rows[0][0]?.ToString(), out tmp);
                                    total += tmp;
                                    UpdateLog.Log("线路" + li.lid + "#" + tmp);
                                }
                                UpdateLog.Log("确报总数#" + total);
                            }
                            catch (Exception ex) { UpdateLog.Error("确报总数#" + ex.Message); }
                            try
                            {
                                UpdateLog.Log("➤ 确报接入率");
                                foreach (LineInfo li in LineList)
                                {
                                    double[] tmp = IndexTest.GetQBRatio(st, ed, li.lid.ToString());
                                    UpdateLog.Log("线路" + li.lid + "#" + tmp[0] + "/" + tmp[1] + " * 100 = " + (tmp[1] != 0 ? Math.Round(tmp[0] / tmp[1], 2, MidpointRounding.AwayFromZero) * 100 : 0) + "%");
                                }
                                double[] all = IndexTest.GetQBRatio(st, ed, null);
                                UpdateLog.Log("确报总接入率#" + all[0] + "/" + all[1] + " * 100 = " + (all[1] != 0 ? Math.Round(all[0] / all[1], 2, MidpointRounding.AwayFromZero) * 100 : 0) + "%");
                                UpdateLog.Log("公式#确报主表中的数值/非客过车总数*100%");
                            }
                            catch (Exception ex) { UpdateLog.Error("确报接入率#" + ex.Message); }
                            try
                            {
                                UpdateLog.Log("➤ 确报车号利用率");

                                foreach (LineInfo li in LineList)
                                {
                                    double tmp = IndexTest.GetQBUseRatio(st, ed, li.lid.ToString());
                                    UpdateLog.Log("线路" + li.lid + "利用率#" + tmp + "%");
                                }
                                double all = IndexTest.GetQBUseRatio(st, ed, null);
                                UpdateLog.Log("确报车号利用率#" + all + "%");
                                UpdateLog.Log("公式#确报弥补的车号数/车号识别短少的车号数*100%");
                            }
                            catch (Exception ex) { UpdateLog.Error("确报车号利用率#" + ex.Message); }
                            break;
                            #endregion

                            #region 车号识别率
                        case "CheckTrainNum":
                            try
                            {
                                UpdateLog.Log("➤ 车号识别率");
                                foreach (LineInfo li in LineList)
                                {
                                    double tmp = IndexTest.GetVisionCarNoRatio(st, ed, li.lid.ToString());
                                    UpdateLog.Log("线路" + li.lid + "识别率#" + tmp + "%");
                                }
                                double all = IndexTest.GetVisionCarNoRatio(st, ed, null);
                                UpdateLog.Log("车号识别率#" + all + "%");
                                UpdateLog.Log("公式#车号正常车辆数/所有过车车辆数*100% [依据数据库计算]");
                            }
                            catch (Exception ex) { UpdateLog.Error(ex.Message); }
                            break;
                            #endregion

                            #region 丢轴
                        case "MissAxle":
                            try
                            {
                                UpdateLog.Log("➤ 丢轴");
                                foreach (LineInfo li in LineList)
                                {
                                    double tmp = IndexTest.GetUnusualAlexTrainRatio(st, ed, li.lid.ToString());
                                    UpdateLog.Log("线路" + li.lid + "丢轴率#" + tmp + "%");
                                }
                                double all = IndexTest.GetUnusualAlexTrainRatio(st, ed, null);
                                UpdateLog.Log("总丢轴率#" + all + "%");
                                UpdateLog.Log("公式#丟轴、多轴列数/实际过车列数*100%");
                                UpdateLog.Log("*注#以算法返回的-11为基准,业务上发生的丢轴、多轴均视为丢轴");
                            }
                            catch (Exception ex) { UpdateLog.Error(ex.Message); }
                            break;
                            #endregion

                            #region 音视频生成率
                        case "GenerateRate_Audio_Video":
                            try
                            {
                                UpdateLog.Log("➤ 音频生成率 和 视频生成率");
                                decimal total_audio = 0, total_video = 0, total_video2 = 0, total_Dir = 0;
                                foreach (LineInfo li in LineList)
                                {
                                    UpdateLog.Log("【线路" + li.lid + "】");
                                    List <string> MissingAudio, MissingVideo, MissingVideo2; int DirCount;
                                    IndexTest.GenerateRate_Audio_Video(st, ed, Common.Default.Path_Pic + li.FolderName, out MissingAudio, out MissingVideo, out MissingVideo2, out DirCount);
                                    UpdateLog.Log("检测文件夹数#" + DirCount);
                                    total_Dir += DirCount;
                                    decimal rate_audio = DirCount != 0 ? Math.Round((DirCount - MissingAudio.Count) / Convert.ToDecimal(DirCount), 4, MidpointRounding.AwayFromZero) * 100 : 0;
                                    total_audio += DirCount - MissingAudio.Count;
                                    UpdateLog.Log("音频生成率#" + rate_audio);
                                    UpdateLog.Log("公式#音频生成率 = 生成主音频文件数/列车文件夹数*100%\r\n");
                                    decimal rate_video = DirCount != 0 ? Math.Round((DirCount - MissingVideo.Count) / Convert.ToDecimal(DirCount), 4, MidpointRounding.AwayFromZero) * 100 : 0;
                                    total_video += DirCount - MissingVideo.Count;
                                    UpdateLog.Log("视频生成率#" + rate_video);
                                    UpdateLog.Log("公式#视频生成率 = 生成主视频文件数/列车文件夹数*100%\r\n");
                                    decimal rate_video2 = DirCount != 0 ? Math.Round((DirCount - MissingVideo2.Count) / Convert.ToDecimal(DirCount), 4, MidpointRounding.AwayFromZero) * 100 : 0;
                                    total_video2 += DirCount - MissingVideo2.Count;
                                    UpdateLog.Log("视频生成率(辅)#" + rate_video2);
                                    UpdateLog.Log("公式#视频生成率 = 生成主视频文件数/列车文件夹数*100%\r\n");
                                    UpdateLog.Log("丢失音频明细");
                                    foreach (string i in MissingAudio)
                                    {
                                        UpdateLog.Log(i);
                                    }
                                    UpdateLog.Log("丢失视频明细");
                                    foreach (string i in MissingVideo)
                                    {
                                        UpdateLog.Log(i);
                                    }
                                    UpdateLog.Log("丢失视频明细(辅)");
                                    foreach (string i in MissingVideo2)
                                    {
                                        UpdateLog.Log(i);
                                    }
                                }
                                UpdateLog.Log("音频总生成率#" + Math.Round(total_audio / total_Dir, 4, MidpointRounding.AwayFromZero) * 100);
                                UpdateLog.Log("视频总生成率#" + Math.Round(total_video / total_Dir, 4, MidpointRounding.AwayFromZero) * 100);
                                UpdateLog.Log("视频总生成率(辅)#" + Math.Round(total_video / total_Dir, 4, MidpointRounding.AwayFromZero) * 100);
                            }
                            catch (Exception ex) { UpdateLog.Error("音频生成率 和 视频生成率异常#" + ex.Message); }
                            break;
                            #endregion

                            #region 图像检测率
                        case "CallRate_Image":
                            try
                            {
                                UpdateLog.Log("➤ 图像检测率");
                                foreach (LineInfo li in LineList)
                                {
                                    double[] tmp = IndexTest.GetImageCheckRatio(st, ed, li.lid.ToString());
                                    UpdateLog.Log("线路" + li.lid + "检测率#" + tmp[0] + "/" + tmp[1] + "=" + tmp[2] + "%");
                                }
                                double[] all_Rate = IndexTest.GetImageCheckRatio(st, ed, null);
                                UpdateLog.Log("图像检测率#" + all_Rate[0] + "/" + all_Rate[1] + "=" + all_Rate[2] + "%");
                                UpdateLog.Log("公式#主服务成功调用算法的个数/所有过车图片数*100%");
                            }
                            catch (Exception ex) { UpdateLog.Error("图像检测率#" + ex.Message); }
                            break;
                            #endregion

                            #region 图像算法调用及时性
                        case "Timely_Image":
                            try
                            {
                                UpdateLog.Log(IndexTest.GetTimely(st, ed));
                            }
                            catch (Exception ex) { UpdateLog.Error("图像算法调用的及时性异常#" + ex.Message); }
                            break;
                            #endregion

                            #region 图像报警准确率
                        case "AccuracyRate_Image":
                            try
                            {
                                foreach (LineInfo li in LineList)
                                {
                                    UpdateLog.Log("【线路" + li.lid + "】");
                                    decimal true_pic  = IndexTest.GetAlarmNum(st, ed, li.lid.ToString(), true, true, "pic");
                                    decimal false_pic = IndexTest.GetAlarmNum(st, ed, li.lid.ToString(), false, true, "pic");
                                    decimal all_pic   = IndexTest.GetAlarmNum(st, ed, li.lid.ToString(), null, true, "pic");
                                    UpdateLog.Log("➤ 真实报警率#" + true_pic + "/" + all_pic + "=" + (all_pic != 0 ? (Math.Round(true_pic / all_pic, 4) * 100) : 0) + "%");
                                    UpdateLog.Log("➤ 误报率#" + false_pic + "/" + all_pic + "=" + (all_pic != 0 ? (Math.Round(false_pic / all_pic, 4) * 100) : 0) + "%");
                                    UpdateLog.Log("*注#基于人工处理后数据才有意义");
                                }
                            }
                            catch (Exception ex) { UpdateLog.Error("图像报警准确率#" + ex.Message); }
                            break;
                            #endregion

                            #region 视频检测率
                        case "CheckRate_Video":
                            try { UpdateLog.Log("此功能暂不实现"); }
                            catch (Exception ex) { UpdateLog.Error("视频检测率#" + ex.Message); }
                            break;
                            #endregion

                            #region 视频算法调用的及时性
                        case "Timely_Video":
                            try { UpdateLog.Log("此功能暂不实现"); }
                            catch (Exception ex) { UpdateLog.Error("视频算法调用的及时性#" + ex.Message); }
                            break;
                            #endregion

                            #region 9个检测项独立统计【报喜不报忧模式】
                        case "Custom4Client":
                            try
                            {
                                UpdateLog.Log("➤ 各类检测项统计");
                                int total_Alarm = 0;
                                foreach (LineInfo li in LineList)
                                {
                                    UpdateLog.Log("【线路" + li.lid + "】");
                                    DataTable tmp = IndexTest.GetAlarmNum(st, ed, li.lid.ToString(), true);
                                    if (tmp != null && tmp.Rows.Count > 0)
                                    {
                                        for (int i = 0; i < tmp.Rows.Count; i++)
                                        {
                                            UpdateLog.Log(tmp.Rows[i]["ProblemType"].ToString() + "#" + tmp.Rows[i]["AlarmNum"].ToString());
                                            total_Alarm += int.Parse(tmp.Rows[i]["AlarmNum"]?.ToString());
                                        }
                                    }
                                }
                                UpdateLog.Log("报警总数#" + total_Alarm);
                            }
                            catch (Exception ex) { UpdateLog.Error("各类别预警数" + ex.Message); }
                            break;
                            #endregion

                        default: break;
                        }
                        TransferFiles.SendVarData(client, Encoding.UTF8.GetBytes(UpdateLog.OutputLog_IntoString(false)));
                        break;
                    }
                    else
                    {
                        Thread.Sleep(0);
                        continue;
                    }
                }
            }
            catch (Exception ex)
            {
                ///当网络异常中断#拔网线等触发,接受为0字节,但是并不认为是异常,因此需要添加心跳机制;
                UpdateLog.Error("接受失败#" + ex.Message);
            }
            finally
            {
                //输出日志文件
                UpdateLog.OutputLog(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TOEC Index Test"), "TOEC Index Test");
                //关闭套接字
                client.Close();
            }
        }
        private void test()
        {
            string FileLastName;
            //是否修改文件名
            bool EditEx = false;
            //MessageBox.Show(DelOldFileTime.ToString());

            //try
            //{
            //获取线程ID
            string ThID = Thread.CurrentThread.ManagedThreadId.ToString();


            IPEndPoint clientep = (IPEndPoint)socket.RemoteEndPoint;
            //显示服务端信息


            //开始接受数据
            //接受文件名
            string fileName = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(socket));
            //接受文件大小
            string fileSize = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(socket));
            //接受包的大小
            string filebagSize = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(socket));
            //接受包的数量
            string filebagCount = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(socket));
            //接受最后一个包的大小
            string fileLastbagSize = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(socket));

            //接受文件MD5值
            //string fileMD5 = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(socket));

            if (fileName != "" && fileSize != "")
            {
                _objForm.SetListBoxMsg = "开始接受数据!";
                _objForm.SetListBoxMsg = "线程[" + ThID + "]文件名为:【" + fileName + "】";
                _objForm.SetListBoxMsg = "线程[" + ThID + "]文件大小:【" + fileSize + "】字节";
                _objForm.SetListBoxMsg = "线程[" + ThID + "]单个包大小:【" + filebagSize + "】字节";
                _objForm.SetListBoxMsg = "线程[" + ThID + "]共发送:【" + filebagCount + "】个数据包";
                _objForm.SetListBoxMsg = "线程[" + ThID + "]最后一个包:【" + fileLastbagSize + "】字节";

                //_objForm.SetListBoxMsg = "发送文件MD5值:[" + fileMD5 + "]";

                //获取文件后缀名
                FileLastName = fileName.Substring(fileName.LastIndexOf("."));

                string SaveFile = saveFilePath + "\\" + fileName.Substring(0, fileName.LastIndexOf(".")) + ".SDM";
                //判断是否按发送时间另存文件
                if (SaveASSate == "Checked")
                {
                    SaveFile = saveFilePath + "\\" + fileName.Substring(0, fileName.LastIndexOf(".")) + "-" + System.DateTime.Now.ToString().Replace(":", "").Replace("-", "").Replace(" ", "") + "-" + Tools.GetRandomStringOnly(5) + ".SDM";
                    //设置修改文件名
                    EditEx = true;
                    //MessageBox.Show(SaveFile);
                }
                else
                {
                    //当文件以覆盖形式保存时,直接使用原始文件名及后缀
                    SaveFile = saveFilePath + "\\" + fileName.Substring(0, fileName.LastIndexOf(".")) + FileLastName;
                }


                System.IO.FileStream _myFileStream = new System.IO.FileStream(SaveFile, System.IO.FileMode.Create, System.IO.FileAccess.Write);

                int SendBagCount = 0;
                _objForm.SetListBoxMsg = "线程[" + ThID + "][" + System.DateTime.Now.ToString() + "]:【" + fileName + "】正在接收中...";
                while (true)
                {
                    byte[] data = TransferFiles.ReceiveVarData(socket);
                    if (data.Length == 0)
                    {
                        break;
                    }
                    else
                    {
                        SendBagCount++;
                        _myFileStream.Write(data, 0, data.Length);
                        //_objForm.SetListBoxMsg = "已经接收" + SendBagCount.ToString() + "个数据包";
                    }

                    if (Convert.ToInt64(_myFileStream.Length) == Convert.ToInt64(fileSize))
                    {
                        ////接受文件MD5值
                        //OldFileMD5 = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(socket));

                        //_objForm.SetListBoxMsg = "线程[" + ThID + "]原始文件MD5值:【" + OldFileMD5 + "】";



                        _objForm.SetListBoxMsg = "线程[" + ThID + "][" + System.DateTime.Now.ToString() + "]:【" + fileName + "】接收完毕,服务端与客户端文件大小相同!";
                    }
                }

                _myFileStream.Dispose();
                _myFileStream.Close();

                System.IO.FileInfo f = new System.IO.FileInfo(SaveFile);
                if (EditEx == true)
                {
                    //把文件改名为传输文件名
                    f.MoveTo(SaveFile.Substring(0, SaveFile.LastIndexOf(".")) + FileLastName);
                    EditEx = false;
                }
            }

            socket.Close();
            _objForm.SetListBoxMsg = "线程[" + ThID + "]客户端连接已经断开!";


            _objForm.SetListBoxMsg = "***********************************************";
            //Thread.CurrentThread.Abort();

            //}
            //catch (Exception ex)
            //{
            //    MessageBox.Show(ex.Message);
            //}
        }
Beispiel #4
0
        /// <summary>
        /// Socket发送指标测试指令
        /// </summary>
        /// <param name="strGetOrSet">字符串</param>
        private void RemoteSetting(object strGetOrSet)//GetConfig 或者 SetConfig
        {
            //初始化建立连接
            try
            {
                setting_s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                //缓冲区设置到2M
                setting_s.SendBufferSize    = 1024 * 1024 * 2;
                setting_s.ReceiveBufferSize = 1024 * 1024 * 2;
                setting_s.NoDelay           = true;
                IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(CurrentIP), CurrentPort);
                setting_s.Connect(ipep); //配置服务器IP与端口
                this.Invoke(new ConnectStatus_Delegate(ConnectStatus), "连接成功");
            }
            catch
            {
                this.Invoke(new ConnectStatus_Delegate(ConnectStatus), "连接【" + CurrentStationName + "】失败");
                return;
            }
            try
            {
                TransferFiles.SendVarData(setting_s, Encoding.UTF8.GetBytes(strGetOrSet.ToString()));
                switch (strGetOrSet.ToString())
                {
                case "GetConfig":
                    try
                    {
                        //接受配置信息
                        byte[] res     = TransferFiles.ReceiveVarData(setting_s);
                        string jsonStr = Encoding.UTF8.GetString(res);
                        if (jsonStr.Contains("Error"))
                        {
                            throw new Exception(jsonStr);
                        }
                        Dictionary <string, string> GetConfig = JsonConvert.DeserializeObject <Dictionary <string, string> >(jsonStr);
                        this.Invoke(new LoadGridView_Delegate(LoadGridView), GetConfig);
                    }
                    catch (Exception ex) { MessageBox.Show(ex.Message); }
                    break;

                case "SetConfig":
                    try
                    {
                        Dictionary <string, string> SetConfig = new Dictionary <string, string>();
                        for (int i = 0; i < gv_Setting.DataRowCount; i++)
                        {
                            DataRow tmp = gv_Setting.GetDataRow(i);
                            SetConfig.Add(tmp["Key"].ToString(), tmp["Value"].ToString());
                        }
                        //发送配置信息
                        TransferFiles.SendVarData(setting_s, Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(SetConfig)));
                    }
                    catch (Exception ex) { MessageBox.Show(ex.Message); }
                    break;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }