Exemplo n.º 1
0
        public void ParseThread()
        {
            return;

            try
            {
                bool   bIsLast   = false;
                string message   = null;
                int    nBufCount = g_messagesQueue.Count;
                while (m_bStartClient || 0 != nBufCount)
                {
                    lock (g_messageSignal)
                    {
                        nBufCount = g_messagesQueue.Count;
                        if (0 != nBufCount)
                        {
                            message   = g_messagesQueue.Dequeue();
                            nBufCount = g_messagesQueue.Count;
                            if (0 == nBufCount)
                            {
                                bIsLast = true;
                            }
                        }
                    }
                    if (m_bStartClient && !bIsLast && nBufCount == 0)
                    {
                        g_SerialEvent.WaitOne();
                    }

                    lock (g_messageSignal)
                    {
                        nBufCount = g_messagesQueue.Count;
                    }
                    if (null == message)
                    {
                        continue;
                    }

                    //处理客户端所发送的数据。
                    if (bIsLast == true)
                    {
                        DealTcpData(message, 1);
                        bIsLast = false;
                    }
                    else
                    {
                        DealTcpData(message, 0);
                    }
                    message = null;

                    lock (g_messageSignal)
                    {
                        nBufCount = g_messagesQueue.Count;
                    }
                }
            }
            catch (Exception ex)
            {
                if (m_bStartClient)
                {
                    if (this.InvokeRequired)
                    {
                        DgTcpException dgTcpException = new DgTcpException(TcpException);
                        this.Invoke(dgTcpException);
                    }
                    else
                    {
                        TcpException();
                    }
                }
                string strExMessage = ex.Message.ToString();

                System.Threading.Thread.CurrentThread.Abort();
            }
        }
Exemplo n.º 2
0
        public void ReveiveThread()
        {
            try
            {
                // 为读取数据而准备缓存
                Byte[] bytes       = new Byte[1024];
                String strLastData = null;

                // 进入监听循环。
                while (true)
                {
                    // 获取一个数据流对象来进行读取和写入
                    NetworkStream stream = null;
                    stream = m_client.GetStream();

                    // 循环接收客户端所发送的所有数据。
                    while (true)
                    {
                        int nReadLength = stream.Read(bytes, 0, bytes.Length);
                        if (nReadLength != 0)
                        {
                            // 把数据字符转化成 UNICODE 字符串。
                            String strTempData = System.Text.Encoding.Unicode.GetString(bytes, 0, nReadLength);
                            String strAllData  = strLastData + strTempData;
                            strLastData = "";

                            while (true)
                            {
                                string strEndFlag = "\r\n\u0003\u0004";
                                int    nFindIndex = strAllData.IndexOf(strEndFlag);
                                if (nFindIndex < 0)
                                {//剩余数据
                                    strLastData = strAllData;
                                    break;
                                }
                                else
                                {//处理一个完整数据
                                    string strTemp = strAllData.Substring(0, nFindIndex + strEndFlag.Length);
                                    strAllData = strAllData.Substring(strTemp.Length);

                                    if (IsOnLive(strTemp))
                                    {//过滤心跳包数据
                                        continue;
                                    }
                                    string strOkMess = strTemp;
                                    DealTcpData(strOkMess, 1);

                                    /*
                                     * lock (g_messageSignal)
                                     * {
                                     *  g_messagesQueue.Enqueue(strOkMess);
                                     *  g_SerialEvent.Set();
                                     * }*/
                                }
                                if (strAllData.Length == 0)
                                {
                                    break;
                                }
                            }
                        }
                        if (nReadLength < bytes.Length)
                        {
                            break;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                if (m_bStartClient)
                {
                    if (this.InvokeRequired)
                    {
                        DgTcpException dgTcpException = new DgTcpException(TcpException);
                        this.Invoke(dgTcpException);
                    }
                    else
                    {
                        TcpException();
                    }
                }
                string strExMessage = ex.Message.ToString();

                System.Threading.Thread.CurrentThread.Abort();
            }
        }