/// <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(); } }