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