⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i8583.cs

📁 8583包打包解包小应用
💻 CS
📖 第 1 页 / 共 2 页
字号:
            msgArr.Add(BitMap);
            
            for (int i = 0; i < 128; i++)
            {
                if (tab[i].flag == "1")
                {
                    msgArr.Add(System.Text.Encoding.Default.GetBytes(tab[i].data));
                }
            } 
            

             
            byte[] B_Msg = new byte[length + 2];
         
            int n = 0;
            foreach (byte[] Msaarr in msgArr)
            {
                for (int i = 0; i < Msaarr.Length; i++)
                {
                    B_Msg[n] = Msaarr[i];
                    n++;
                }
            }

            return B_Msg; ////2位报文长度+11位报文头(原来是19位,修正后为tpdu+报文头)+4位消息类型+16位位图+数据元
        }


        /// <summary>
        /// 接收报文BITMAP转换
        /// </summary>
        /// <param name="value">需要转换的数据</param>
        /// <param name="fromBase">转换前进制</param>
        /// <param name="toBase">转换后进制</param>
        /// <returns></returns>
        public string AcceptConvertString(string value, int fromBase, int toBase)
        {
            int intValue = Convert.ToInt32(value, fromBase);
            string S_ConvertString = Convert.ToString(intValue, toBase);
            S_ConvertString = Convert.ToInt32(S_ConvertString).ToString("D8");
            return S_ConvertString;
        }

        /// <summary>
        /// 解包
        /// </summary>
        /// <param name="B_Msg">字节报文:2位报文长度+11位报文头(原来是19位,修正后为tpdu+报文头)+4位消息类型+8/16位位图+数据元</param>
        public void UnPack8583(byte[] B_Msg)
        {
            //报文不合法
            if (B_Msg.Length < 33)
            {
                tab[0].data = "Error:Packed lenth<33";
                return;
            }
            byte[] bitmap = new byte[16];
            string S_BitMap = "";
            int maplen = 16;
            for (int i = 17; i < 33; i++) //取16位位图
            {
                bitmap[i - 17] = B_Msg[i];
            }
            if ((uint)bitmap[0] < 128)
            {
                maplen = 8;
                for (int i = 8; i < 16; i++) bitmap[i] = 0;
            }
            for (int i = 0; i < maplen; i++)
            {
                string T_BitMap = AcceptConvertString(System.Convert.ToString(bitmap[i]), 10, 2);
                S_BitMap = S_BitMap + T_BitMap;
            }

            //解读报文
            int n = 0; int ptr = 33;
            //if (maplen == 8) ptr = 25;
            foreach (char C_BitMap in S_BitMap)
            {
                string flag = Convert.ToString(C_BitMap);
                if (flag == "1")
                {
                    try
                    {
                        tab[n].flag = "1";
                        if (tab[n].len_var > 0)
                        {
                            byte[] t_byte = new byte[tab[n].len_var];
                            for (int i = 0; i < tab[n].len_var; i++)
                            {
                                t_byte[i] = B_Msg[ptr];
                                ptr++;
                            }
                            int len = Int32.Parse(System.Text.Encoding.Default.GetString(t_byte));

                            byte[] t_byte2 = new byte[len];
                            for (int i = 0; i < len; i++)
                            {
                                t_byte2[i] = B_Msg[ptr];
                                ptr++;
                            }
                            if (n == 95) tab[n].data = System.Text.Encoding.Unicode.GetString(t_byte2);
                            else tab[n].data = System.Text.Encoding.Default.GetString(t_byte2);
                        }
                        else
                        {
                            byte[] t_byte = new byte[tab[n].len];
                            for (int i = 0; i < tab[n].len; i++)
                            {
                                t_byte[i] = B_Msg[ptr];
                                ptr++;
                            }
                            if (n == 95) tab[n].data = System.Text.Encoding.Unicode.GetString(t_byte);
                            else tab[n].data = System.Text.Encoding.Default.GetString(t_byte);
                        }
                    }
                    catch
                    {
                        tab[0].data = "Error:Packed tab" + n.ToString(); ;
                        return;
                    }
                }
                n++;
            }
        }
        //报文收发
        static public Socket sender = null;
        static public Socket recver = null;
        static public byte[] SynSocketClient(byte[] Msg)
        {
            byte[] bytes = new byte[10240];
            try
            {
                if (!sender.Connected)
                {
                    bytes[0] = 4;
                }
                if (sender.Poll(-1, SelectMode.SelectWrite))
                {
                    int bytesSent = sender.Send(Msg, 0, Msg.Length, SocketFlags.None);
                }
                else
                {
                    bytes[0] = 3;
                }

                if (sender.Poll(-1, SelectMode.SelectRead))
                {
                    int bytesRec = sender.Receive(bytes, 0, 2, SocketFlags.None);
                    bytesRec = (int)bytes[0] * 256 + (int)bytes[1];
                    bytesRec = sender.Receive(bytes, 2, bytesRec, SocketFlags.None);
                    bytesRec += 0;
                }
                else
                {
                    bytes[0] = 2;
                }
            }
            catch
            {
                bytes[0] = 1;
            }
            return bytes;
        }

        static public bool Socket_stop()
        {
            try
            {
                sender.Shutdown(SocketShutdown.Both);
                sender.Close();
                recver.Shutdown(SocketShutdown.Both);
                recver.Close();
            }
            catch
            {
                return false;
            }
            return true;
        }

        static public bool Socket_start()
        {
            try
            {
                string hostIP = "10.245.0.64";
                int port = 19008;
                //				hostIP=Setup.GetReg("Pip");
                //				port=Int32.Parse(Setup.GetReg("Port"));
                //				IPHostEntry ipHostInfo=Dns.Resolve(hostIP);
                //				IPAddress ipAddress=ipHostInfo.AddressList[0];
                IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(hostIP), port);

                sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                sender.Connect(remoteEP);
            }
            catch
            {
                return false;
            }
            return true;
        }

        static public bool Socket_recver()
        {
            try
            {
                string hostIP = "10.245.0.64";
                int port = 6677;
                //				hostIP=Setup.GetReg("Pip");
                //				port=Int32.Parse(Setup.GetReg("Port"));
                //				IPHostEntry ipHostInfo=Dns.Resolve(hostIP);
                //				IPAddress ipAddress=ipHostInfo.AddressList[0];
                IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(hostIP), port);

                recver = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                recver.Connect(remoteEP);
            }
            catch
            {
                return false;
            }
            return true;
        }

        public byte[] TestPack8583(string msgType)
        {
            byte[] cd =new byte[2];
            ArrayList msgArr = new ArrayList();
            byte[] tpdu = new byte[] { 0x60, 0x00, 0x30, 0x00, 0x00 };
            byte[] pkg_head = new byte[] { 0x62, 0x00, 0x00, 0x00,0x00,0x00};
            

            int length = msgType.Length+tpdu.Length+pkg_head.Length ;
            byte[] B_Msg = new byte[length + 2];
            cd[0] = (byte)((length / 256) % 256);
            cd[1] = (byte)(length % 256);

            msgArr.Add(cd);
            msgArr.Add(tpdu);
            msgArr.Add(pkg_head);
            msgArr.Add(System.Text.Encoding.Default.GetBytes(msgType));

            int n = 0;
            foreach (byte[] Msaarr in msgArr)
            {
                for (int i = 0; i < Msaarr.Length; i++)
                {
                    B_Msg[n] = Msaarr[i];
                    n++;
                }
            }

            return B_Msg;
           
        }

    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -