Esempio n. 1
0
        private uint _msLengthInfo;       //_ms里的有效长度

        ///<summary>
        /// 网络中接收到数据的事件发生
        ///</summary>
        ///<param name="sender"></param>
        ///<param name="e"></param>
        public void RecvInfoData(object sender, RecvDataEventArgs e)
        {
            while (_packetStartPosInfo < e.Length)
            {
                if (_bodyLenInfo == 0)
                {
                    if ((_packetStartPosInfo + 3) < e.Length)
                    {
                        //获取包体长度
                        byte[] len = new byte[]
                        {
                            e.Data[_packetStartPosInfo], e.Data[_packetStartPosInfo + 1],
                            e.Data[_packetStartPosInfo + 2],
                            e.Data[_packetStartPosInfo + 3]
                        };
                        _bodyLenInfo = BitConverter.ToInt32(len, 0);
                    }
                    else
                    {
                        break;
                    }
                }

                //如果有一个完整包,解包
                if (_packetStartPosInfo + 16 + _bodyLenInfo - _msLengthInfo < e.Length)
                {
                    {
                        _msInfo.Write(e.Data, Convert.ToInt32(_packetStartPosInfo), Convert.ToInt32(17 + _bodyLenInfo - _msLengthInfo));
                        _packetStartPosInfo += 17 + (uint)_bodyLenInfo - _msLengthInfo;
                        InfoDataPacket dataPacket = InfoDataPacket.DecodePacket(_msInfo.ToArray(), Convert.ToInt32(17 + _bodyLenInfo));

                        _bodyLenInfo     = 0;
                        _msInfo.Position = 0;
                        _msLengthInfo    = 0;
                        if (dataPacket != null && dataPacket.IsResult)
                        {
                            //(new Thread(ProcessDataPacket)).Start(new CMRecvDataEventArgs(_ipAddressPort,
                            //                                                        dataPacket, e.Length));
                        }
                    }
                }
                else
                {
                    break;
                }
            }
            //有多余的字节,且不是一个完整包,存起来
            if (e.Length > _packetStartPosInfo)
            {
                _msInfo.Write(e.Data, Convert.ToInt32(_packetStartPosInfo), Convert.ToInt32(e.Length - _packetStartPosInfo));
                _msLengthInfo += (uint)(e.Length - _packetStartPosInfo);
            }
            else
            {
                _msLengthInfo = 0;
            }
            _packetStartPosInfo = 0;
        }
Esempio n. 2
0
        public void ReceiveDataCallBack(TcpService tcpService, byte[] data)
        {
            try
            {
                DataPacket dataPacket = null;
                if (tcpService == TcpService.JGFW)
                {
                    Console.WriteLine("1");
                }
                switch (tcpService)
                {
                case TcpService.SSHQ:
                case TcpService.LSHQ:
                case TcpService.WPFW:
                    dataPacket = RealTimeDataPacket.DecodePacket(data, data.Length);
                    break;

                case TcpService.DPZS:
                case TcpService.JGFW:
                case TcpService.GPZS:
                case TcpService.JGLS:
                    dataPacket = OrgDataPacket.DecodePacket(data, data.Length);
                    break;

                case TcpService.HQZX:
                    dataPacket = InfoDataPacket.DecodePacket(data, data.Length);
                    break;
                }

                if (dataPacket != null && dataPacket.IsResult)
                {
                    if (DoCMReceiveData != null) //通知界面而已,对于数据的响应在这个类中完成。
                    {
                        DoCMReceiveData(this,
                                        new CMRecvDataEventArgs(tcpService, dataPacket, data.Length));
                    }
                }
            }
            catch (Exception e)
            {
                LogUtilities.LogMessage("ReceiveDataCallBack Error" + e.Message);
            }
        }