コード例 #1
0
ファイル: TCPClientET.cs プロジェクト: zoutao0702/Easytl
        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);
                }
            }
        }
コード例 #2
0
ファイル: UDPClientET.cs プロジェクト: zoutao0702/Easytl
        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);
                }
            }
        }