private void Recive() { while (true) { try { if (Connected && tcpclient != null) { if (CommandLenLength > 0) { byte[] datalen = new byte[CommandLenIndex + CommandLenLength]; int rnum = tcpclient.Receive(datalen, datalen.Length, SocketFlags.None); if (rnum == datalen.Length) { int dataalllen = 0; try { dataalllen = GetDataAllLength(datalen.Skip(CommandLenIndex).ToArray()); } catch { dataalllen = 0; } if (dataalllen > 0) { byte[] data = new byte[dataalllen]; int datarevcount = rnum; datalen.CopyTo(data, datarevcount - datalen.Length); do { datarevcount += tcpclient.Receive(data, datarevcount, dataalllen - datarevcount, SocketFlags.None); } while (datarevcount < dataalllen); if (ReciveData != null) { foreach (EventHandler <ReciveEventArgs> deleg in ReciveData.GetInvocationList()) { deleg.BeginInvoke(this, new ReciveEventArgs() { Data = data }, null, null); } } if (ReciveDataHex != null) { foreach (EventHandler <ReciveHexEventArgs> deleg in ReciveDataHex.GetInvocationList()) { deleg.BeginInvoke(this, new ReciveHexEventArgs() { DataHex = BitConverter.ToString(data).ToUpper().Trim().Replace("-", string.Empty) }, null, null); } } } } } else { byte[] datalen = new byte[CommandLenMaxLength]; int rnum = tcpclient.Receive(datalen, datalen.Length, SocketFlags.None); if (rnum > 0) { byte[] data = new byte[rnum]; Array.Copy(datalen, 0, data, 0, data.Length); if (ReciveData != null) { foreach (EventHandler <ReciveEventArgs> deleg in ReciveData.GetInvocationList()) { deleg.BeginInvoke(this, new ReciveEventArgs() { Data = data }, null, null); } } if (ReciveDataHex != null) { foreach (EventHandler <ReciveHexEventArgs> deleg in ReciveDataHex.GetInvocationList()) { deleg.BeginInvoke(this, new ReciveHexEventArgs() { DataHex = BitConverter.ToString(data).ToUpper().Trim().Replace("-", string.Empty) }, null, null); } } } } } else { Thread.Sleep(2000); } } catch (Exception ex) { if (ex is SocketException) { if (Connected) { if (tcpclient != null && tcpclient.Connected) { lock (lock_Connect) { tcpclient.Shutdown(SocketShutdown.Both); tcpclient.Close(); tcpclient = null; } } Connected = false; ConnectStateChange(); } } Thread.Sleep(2000); } } }
private void Recive() { while (true) { try { if (udpclient != null) { EndPoint RemoteEndPoint = new IPEndPoint(IPAddress.Any, 0); if (CommandLenLength > 0) { byte[] datalen = new byte[CommandLenIndex + CommandLenLength]; int rnum = udpclient.ReceiveFrom(datalen, datalen.Length, SocketFlags.None, ref RemoteEndPoint); if (rnum == datalen.Length) { int dataalllen = 0; try { dataalllen = GetDataAllLength(datalen.Skip(CommandLenIndex).ToArray()); } catch { dataalllen = 0; } if (dataalllen > 0) { byte[] data = new byte[dataalllen]; int datarevcount = rnum; datalen.CopyTo(data, datarevcount - datalen.Length); do { datarevcount += udpclient.ReceiveFrom(data, datarevcount, dataalllen - datarevcount, SocketFlags.None, ref RemoteEndPoint); } while (datarevcount < dataalllen); if (ReciveData != null) { foreach (EventHandler <ReciveClientEventArgs> deleg in ReciveData.GetInvocationList()) { deleg.BeginInvoke(this, new ReciveClientEventArgs() { RemoteEndPoint = RemoteEndPoint, Data = data }, null, null); } } if (ReciveDataHex != null) { foreach (EventHandler <ReciveClientHexEventArgs> deleg in ReciveDataHex.GetInvocationList()) { deleg.BeginInvoke(this, new ReciveClientHexEventArgs() { RemoteEndPoint = RemoteEndPoint, DataHex = BitConverter.ToString(data).ToUpper().Trim().Replace("-", string.Empty) }, null, null); } } } } } else { byte[] datalen = new byte[CommandLenMaxLength]; int rnum = udpclient.ReceiveFrom(datalen, datalen.Length, SocketFlags.None, ref RemoteEndPoint); if (rnum > 0) { byte[] data = new byte[rnum]; Array.Copy(datalen, 0, data, 0, data.Length); if (ReciveData != null) { foreach (EventHandler <ReciveClientEventArgs> deleg in ReciveData.GetInvocationList()) { deleg.BeginInvoke(this, new ReciveClientEventArgs() { RemoteEndPoint = RemoteEndPoint, Data = data }, null, null); } } if (ReciveDataHex != null) { foreach (EventHandler <ReciveClientHexEventArgs> deleg in ReciveDataHex.GetInvocationList()) { deleg.BeginInvoke(this, new ReciveClientHexEventArgs() { RemoteEndPoint = RemoteEndPoint, DataHex = BitConverter.ToString(data).ToUpper().Trim().Replace("-", string.Empty) }, null, null); } } } } } else { Thread.Sleep(2000); } } catch (Exception ex) { Thread.Sleep(2000); } } }