/// <summary> /// 发送函数 /// </summary> /// <param name="strCode"></param> /// <param name="strMsg"></param> /// <returns></returns> public Boolean SendMsg(String strCode, String strMsg, string strMsgCode) { try { if (String.IsNullOrEmpty(strCode) == true || string.IsNullOrEmpty(strMsg) == true) { return(false); } if (this.priClientList.Any(m => m.Code.Equals(strCode) == true && m.RefreshTime.AddMinutes(10) >= DateTime.Now) == false) { return(false); } ClientEntity clientEnt = this.priClientList.FirstOrDefault(m => m.Code.Equals(strCode) == true); clientEnt.MsgCode = strMsgCode; if (strMsg.Length >= 8) { clientEnt.CMD = strMsg.Substring(0, 8); } Byte[] sendBytes = ArConvert.strToToHexByte(strMsg); Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "Send: Code:{0},Msg:{1}", strCode, strMsg); LogHelper.Instance.AddLog("日志", "记录", String.Format("Send: Code:{0},Msg:{1}", strCode, strMsg)); //LogHelper.Instance.AddLog("日志", "服务端(SendMsg)", string.Format("Send: Code:{0},Msg:{1}", strCode, strMsg)); Boolean bjg = clientEnt.ClientSoket.Send(sendBytes, 0) > 0 ? true : false; //clientEnt.ClientSoket.Close(); //clientEnt.ClientSoket.co return(bjg); } catch (Exception ex) { Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "异常" + "服务端(SendMsg)" + ex.Message); LogHelper.Instance.AddLog("日志", "异常", "服务端(SendMsg)" + ex.Message); //LogHelper.Instance.AddLog("错误", "服务端(SendMsg)", ex.Message); } return(false); }
//数据处理接口 public void ClientServer() { try { while (true) { Socket sokConnection = socketWatch.Accept(); Console.WriteLine(DateTime.Now + "_连接成功_" + sokConnection.RemoteEndPoint); LogHelper.Instance.AddLog("日志", "记录", "连接成功_" + sokConnection.RemoteEndPoint); Byte[] sendBytes = ArConvert.strToToHexByte("21808500"); Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "Send: Msg:{0}", "21808500"); LogHelper.Instance.AddLog("日志", "记录", "Send: Msg:{0}" + "21808500"); sokConnection.Send(sendBytes, 0); Thread thr = new Thread(RecMsg); thr.IsBackground = true; thr.Start(sokConnection); dictThread.Add(sokConnection.RemoteEndPoint.ToString(), thr); // 将新建的线程 添加 到线程的集合中去。 } } catch (Exception ex) { Console.Write("出现异常:" + ex.ToString()); LogHelper.Instance.AddLog("日志", "异常", "出现异常:" + ex.ToString()); //Console.ReadLine(); } }
void RecMsg(object sokConnectionparn) { Socket sokClient = sokConnectionparn as Socket; while (true) { int length = -1; try { length = sokClient.Receive(receiveBytes); // 接收数据,并返回数据的长度; ik = 0; } catch (Exception se) { //sokClient.Connect(sokClient.RemoteEndPoint); ik++; Console.WriteLine("异常:" + se.Message); LogHelper.Instance.AddLog("日志", "异常", se.Message); if (ik >= 3) //三次容错 { // 从 通信套接字 集合中删除被中断连接的通信套接字; if (this.priClientList.Exists(m => m.RemoteEndPoint.Equals(sokClient.RemoteEndPoint.ToString())) == true) { this.priClientList.RemoveAll(m => m.RemoteEndPoint.Equals(sokClient.RemoteEndPoint.ToString())); } // 从通信线程集合中删除被中断连接的通信线程对象; dictThread.Remove(sokClient.RemoteEndPoint.ToString()); break; } } if (length > 0) { #region 处理接收到的数据 string receiveString = ArConvert.byteToHexStr(receiveBytes.Take(length).ToArray()); Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "Received: {0}", receiveString); LogHelper.Instance.AddLog("日志", "记录", "Received:" + receiveString); //处理连包 心跳 string strXT = ""; if (length >= 6 && receiveString.Substring(0, 8).Equals("2183FF00") == true) { strXT = receiveString.Substring(0, 12); this.ExecuteData(sokClient, receiveString.Substring(0, 12)); } //数据 this.ExecuteData(sokClient, String.IsNullOrEmpty(strXT) == false ? receiveString.Replace(strXT, "") : receiveString); #endregion } } }
//数据处理接口 public void ClientServer() { try { while (true) { //recCount = client.Receive(receiveBytes, receiveBytes.Length, 0);//从客户端接收信息 IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint Remote = (EndPoint)(sender); recCount = client.ReceiveFrom(receiveBytes, ref Remote); if (recCount != 0)//当服务器端的缓冲区接收到的信息不为空时 { //data = encoding.getb(receiveBytes, 0, recCount); //接收数据 Console.WriteLine(DateTime.Now.ToString() + ArConvert.byteToHexStr(receiveBytes.Take(recCount).ToArray())); Console.WriteLine(DateTime.Now + data); //接收数据成功后给客户端返回OK //client.Send(encoding.GetBytes("OK"), 2, 0); } else { break; } } } catch (Exception ex) { Console.Write("出现异常:"); Console.WriteLine(ex.ToString()); Console.ReadLine(); } client.Close(); }
//void ExecuteData(object objval) public void ExecuteDataTest(string receiveString) { try { if (receiveString.Length >= 8) { //心跳 if (receiveString.Substring(0, 8).Equals("2183FF00") == true || receiveString.Substring(0, 8).Equals("21848500") == true || receiveString.Substring(0, 8).Equals("21838500") == true) { //LogHelper.Instance.AddLog("日志", "服务端(ExecuteData)", string.Format("心跳:" + _ClientSocket.RemoteEndPoint.ToString() + receiveString)); String strCode = ""; if (receiveString.Substring(0, 8).Equals("2183FF00") == true) { strCode = ArConvert.Convert16ToInt(receiveString.Substring(8, 4)).ToString(); } else { strCode = ArConvert.Convert16ToInt(receiveString.Substring(14, 4)).ToString(); } if (this.priClientList.Any(m => m.Code.Equals(strCode) == true) == false) //新增 { //this.priClientList.Add(new ClientEntity(strCode, _ClientSocket, DateTime.Now) { RemoteEndPoint = _ClientSocket.RemoteEndPoint.ToString() }); //LogHelper.Instance.AddLog("日志", "Sql1", " update SRTE_Device set Updatetiem=[$Updatetiem$] where Code=[$Code$]___________ " + DateTime.Now + strCode); DataBaseHelper.Instance.Helper.ExecuteNonQuery(System.Data.CommandType.Text, " update SRTE_Device set Updatetiem=[$Updatetiem$] where Code=[$Code$] " , new DataParameter("Updatetiem", DateTime.Now), new DataParameter("Code", strCode) ); } else //修改 { ClientEntity clientEnt = this.priClientList.FirstOrDefault(m => m.Code.Equals(strCode) == true); //if (clientEnt.RemoteEndPoint.Equals(_ClientSocket.RemoteEndPoint.ToString()) == false) { clientEnt.RefreshTime = DateTime.Now; //LogHelper.Instance.AddLog("日志", "Sql2", " update SRTE_Device set Updatetiem=[$Updatetiem$] where Code=[$Code$]___________ " + DateTime.Now + strCode); DataBaseHelper.Instance.Helper.ExecuteNonQuery(System.Data.CommandType.Text, " update SRTE_Device set Updatetiem=[$Updatetiem$] where Code=[$Code$] " , new DataParameter("Updatetiem", DateTime.Now), new DataParameter("Code", strCode) ); } } } if (receiveString.Substring(0, 8).Equals("2183FF00") == false) { //if (this.priClientList.Any(m => m.RemoteEndPoint.Equals(_ClientSocket.RemoteEndPoint.ToString()) == true) == true) //有效设备 { ClientEntity clientEnt = new ClientEntity(); //this.priClientList.FirstOrDefault(m => m.RemoteEndPoint.Equals(_ClientSocket.RemoteEndPoint.ToString()) == true); clientEnt.RefreshTime = DateTime.Now; String strsql = "delete from SRTE_DeviceCMD where addtime<DateAdd(day,-5,getdate());update SRTE_Device set Updatetiem=getdate() where Code=(select top 1 SRTE_DeviceCode from SRTE_DeviceCMD where Code=[$Code$]); update SRTE_DeviceCMD set State=1,ReturnCMD='" + receiveString + "' where Code=[$Code$]; "; if (receiveString.Substring(0, 8).Equals("2183A900") == true) //信号机报警 { //receiveString String strDe = ""; //Int32 ipid = -1; string strejz = ArConvert.Convert16To2(receiveString.Substring(10, 2), 8); Int32 ixw1 = ArConvert.Convert16ToInt(receiveString.Substring(12, 2)); Int32 ixw2 = ArConvert.Convert16ToInt(receiveString.Substring(14, 2)); if (strejz.Substring(0, 1) == "1" && ixw1 > 0) { strDe += "相位" + ixw1 + "红绿灯同亮;"; } if (strejz.Substring(1, 1) == "1" && ixw1 > 0) { strDe += "相位" + ixw1 + "红灯故障;"; } if (strejz.Substring(2, 1) == "1" && ixw1 > 0 && ixw2 > 0) { strDe += "相位" + ixw1 + "、" + ixw2 + "绿冲突;"; } if (strejz.Substring(3, 1) == "1") { strDe += "通信故障;"; } if (strejz.Substring(4, 1) == "1") { strDe += "其它故障;"; } if (strejz.Substring(5, 1) == "1") { strDe += "液晶屏故障;"; } if (strejz.Substring(6, 1) == "1") { strDe += "存储器故障;"; } if (strejz.Substring(6, 1) == "1") { strDe += "时钟故障;"; } if (strejz.Equals("00000000") == true) { strDe += "故障解除;"; } strDe = strDe.TrimEnd(';'); strsql += " insert into SR_Systemrecord(Pid,Title,Description,Adddate,Ltype) values(1,[$Code$],'" + strDe + "',GETDATE(),'事件');"; } else if (receiveString.Substring(0, 8).Equals("2183A100") == true) //检测器数据表 { //insert into SRTE_Flow values('',GETDATE(),1,1); for (int i = 1; i < 49; i++) { strsql += String.Format(" insert into SRTE_Flow values([$Code$],GETDATE(),{0},{1}); ", i, ArConvert.Convert16ToInt(receiveString.Substring(10 + (i - 1) * 14 + 2, 2)) ); } } DataBaseHelper.Instance.Helper.ExecuteNonQuery(CommandType.Text, strsql, new DataParameter("Code", clientEnt.MsgCode)); clientEnt.MsgCode = ""; clientEnt.CMD = ""; } } } } catch (Exception ex) { Console.WriteLine(String.Format("{0}_方法:{1}_数据包:{2}_异常内容:{3}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "ExecuteData", receiveString, ex.Message)); LogHelper.Instance.AddLog("日志", "异常", String.Format("{0}_方法:{1}_数据包:{2}_异常内容:{3}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "ExecuteData", receiveString, ex.Message)); //LogHelper.Instance.AddLog("异常", "服务端(ExecuteData)", ex.Message); } }