private bool ConnectPLCUdp(ref string reStr) { try { lock (lockObj) { if (string.IsNullOrEmpty(this.connStr)) { reStr = "PLC通信地址为空!"; return(false); } //this.connStr = plcAddr; string[] splitStr = new string[] { ",", ";", ":", "-", "|" }; string[] strArray = this.connStr.Split(splitStr, StringSplitOptions.RemoveEmptyEntries); if (strArray.Count() < 2) { isConnected = false; } string remoteIP = strArray[0]; int remotePort = int.Parse(strArray[1]); if (udpClient == null) { udpClient = new UdpClient(9898); } this.udpRemotePoint = new IPEndPoint(IPAddress.Parse(remoteIP), remotePort); UdpState udpReceiveState = new UdpState(); udpReceiveState.ipEndPoint = this.udpRemotePoint; udpReceiveState.udpClient = udpClient; udpClient.BeginReceive(UdpRecvCallback, udpReceiveState); //if(udpRecvThread == null) //{ // udpRecvThread = new Thread(UdpRecvProc); // udpRecvThread.IsBackground = true; // exitUdpRecv = false; //} //if (this.udpRecvThread.ThreadState == (ThreadState.Background | ThreadState.Unstarted)) //{ // udpRecvThread.Start(); //} //pauseUdpRecv = false; reStr = "PLC连接成功"; isConnected = true; this.netFailTimes = 0; //读写失败次数清零 return(true); } } catch (Exception ex) { reStr = ex.ToString(); return(false); } }
private void UdpRecvCallback(IAsyncResult iar) { UdpState udpState = iar.AsyncState as UdpState; if (iar.IsCompleted) { Byte[] recBytes = udpState.udpClient.EndReceive(iar, ref udpState.ipEndPoint); if (recBytes != null && recBytes.Count() > 0) { OnRecComplete(recBytes); } } udpClient.BeginReceive(UdpRecvCallback, udpState); }
public bool Connect(string ip, int port, ref string reStr) { try { lock (lockObj) { if (string.IsNullOrEmpty(ip)) { reStr = "PLC通信地址为空!"; return(false); } if (this.udpClientEnabled == false) { this.udpClientEnabled = true; this.LocalPort = GetLocalPort(); udpClient = new UdpClient(this.LocalPort); currUsePort.Add(this.LocalPort); this.udpRemotePoint = new IPEndPoint(IPAddress.Parse(ip), port); udpReceiveState = new UdpState(); udpReceiveState.ipEndPoint = this.udpRemotePoint; udpReceiveState.udpClient = udpClient; } this.ServerIP = ip; this.ServerPort = port; udpClient.BeginReceive(UdpRecvCallback, udpReceiveState); reStr = "PLC连接成功"; this.isConected = true; return(true); } } catch (Exception ex) { reStr = ex.ToString(); this.isConected = false; this.udpClientEnabled = false; currUsePort.Remove(this.LocalPort); return(false); } }
private void UdpRecvCallback(IAsyncResult iar) { try { UdpState udpState = iar.AsyncState as UdpState; if (iar.IsCompleted) { Byte[] recBytes = udpState.udpClient.EndReceive(iar, ref udpState.ipEndPoint); if (recBytes != null && recBytes.Count() > 0) { for (int i = 0; i < recBytes.Count(); i++) { if (recBytes[i] == '{') { this.recvStr = ""; this.recvPhase = 1; continue; } else if (recBytes[i] == '}') { this.recvPhase = 2; break; } if (this.recvPhase == 1) { this.recBuffer.Add(recBytes[i]); } } // this.recBuffer.AddRange(recBytes); if (this.recvPhase == 2) { Encoding gb2312 = Encoding.GetEncoding("GB2312"); this.recvStr = gb2312.GetString(this.recBuffer.ToArray()).Trim(); //Console.WriteLine("收到{0}数据:{1}", connStr, recvStr); } } } udpClient.BeginReceive(UdpRecvCallback, udpState); } catch (Exception ex) { isConnected = false; Console.WriteLine("{0}数据通信异常,{1}", this.DevID, ex.ToString()); } }
private void UdpRecvCallback(IAsyncResult iar) { UdpState udpState = iar.AsyncState as UdpState; if (iar.IsCompleted) { Byte[] recBytes = udpState.udpClient.EndReceive(iar, ref udpState.ipEndPoint); if (recBytes != null && recBytes.Count() > 0) { this.recBuffer.AddRange(recBytes); //Console.Write("Recv:"); //for(int i=0;i<recBytes.Count();i++) //{ // Console.Write("{0}", recBytes[i].ToString("X2")); //} //Console.WriteLine(""); } } udpClient.BeginReceive(UdpRecvCallback, udpState); }
private void UdpRecvCallback(IAsyncResult iar) { try { UdpState udpState = iar.AsyncState as UdpState; if (iar.IsCompleted) { Byte[] recBytes = udpState.udpClient.EndReceive(iar, ref udpState.ipEndPoint); if (recBytes != null && recBytes.Count() > 0) { OnRecComplete(recBytes); } } udpClient.BeginReceive(UdpRecvCallback, udpState); } catch (Exception ex) { Console.WriteLine("SUdpClient类UdpRecvCallback错误:" + ex.StackTrace.ToString()); } }
public bool Connect(ref string reStr) { try { lock (lockObj) { if (string.IsNullOrEmpty(this.connStr)) { reStr = "PLC通信地址为空!"; return(false); } //this.connStr = plcAddr; string[] splitStr = new string[] { ",", ";", ":", "-", "|" }; string[] strArray = this.connStr.Split(splitStr, StringSplitOptions.RemoveEmptyEntries); if (strArray.Count() < 2) { isConnected = false; } string remoteIP = strArray[0]; int remotePort = int.Parse(strArray[1]); if (udpClient == null) { udpClient = new UdpClient(LocalPort); } this.udpRemotePoint = new IPEndPoint(IPAddress.Parse(remoteIP), remotePort); UdpState udpReceiveState = new UdpState(); udpReceiveState.ipEndPoint = this.udpRemotePoint; udpReceiveState.udpClient = udpClient; udpClient.BeginReceive(UdpRecvCallback, udpReceiveState); return(true); } } catch (Exception ex) { reStr = ex.ToString(); return(false); } }