Exemple #1
0
        const int PACKLEN = 30;//分包的包长,为了测试方便,这里包长设置很小,经测试设为30000也没有问题

        //分包发送
        public bool sendMsgByPackages(byte[] sb, List <NETADDR> das, INetRouterClient client)
        {
            List <byte[]> listsb = new List <byte[]>();
            int           i = 0, j = 0;
            List <byte>   bytArray = new List <byte>();

            for (i = 0; i < sb.Length;)
            {
                if (j >= PACKLEN)
                {
                    listsb.Add(bytArray.ToArray());
                    j = 0;
                    bytArray.Clear();
                }
                bytArray.Add(sb[i]);
                j++; i++;

                if (i == sb.Length)
                {
                    listsb.Add(bytArray.ToArray());
                }
            }

            int flag = 0;

            for (int len = 0; len < listsb.Count(); len++)
            {
                byte[] des = new byte[4];
                des[0] = (byte)(listsb.Count());              // 总包数
                des[1] = (byte)(len);                         //第几包,从第0包开始
                des[2] = (byte)((listsb[len].Length >> 8) & 0xff);
                des[3] = (byte)((listsb[len].Length) & 0xff); //有效长度



                //将分包信息加入到每个分包的头
                List <byte> bytlist = new List <byte>();
                bytlist.AddRange(des);
                bytlist.AddRange(listsb[len]);
                byte[] sbtemp = bytlist.ToArray();


                SENDMSG sendMsg = new SENDMSG(ref sbtemp, ref das);
                if (!client.sendMessage(ref sendMsg))
                {
                    flag++;
                }
            }
            if (flag == 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Exemple #2
0
        //public void Send(string p_DstAddressStr, string p_Message)
        //{
        //    if (this.m_NetRouterClient == null)
        //    {
        //        this.m_StatusStrAction("尚未与网络路由服务器建立连接");
        //        return;
        //    }
        //    NETADDR NetAddr = NetRouterClientHelper.ConvertAddress(p_DstAddressStr);
        //    List<NETADDR> adrlist = new List<NETADDR>();
        //    adrlist.Add(NetAddr);
        //    //SENDMSG sMessage = new SENDMSG(ref p_Message, ref adrlist);
        //    //for (int i = 0; i < 10; i++)
        //    {
        //        byte[] t_Data = Encoding.UTF8.GetBytes(p_Message);
        //        int length = t_Data.Length;
        //        byte[] t_LengthBytes = Int32ToByte(length);
        //        byte[] t_SendData = new byte[4 + length];
        //        t_LengthBytes.CopyTo(t_SendData, 0);
        //        t_Data.CopyTo(t_SendData, 4);
        //        SENDMSG tMessage = new SENDMSG(ref t_SendData, ref adrlist);
        //        if (!m_NetRouterClient.sendMessage(ref tMessage))
        //        {
        //            if (this.m_StatusStrAction != null)
        //            {
        //                this.m_StatusStrAction("发送错误!");
        //            }
        //        }
        //        else
        //        {
        //            if (this.m_StatusStrAction != null)
        //            {
        //                this.m_StatusStrAction("发送成功!");
        //            }
        //        }
        //    }
        //}

        /// <summary>
        /// 添加头部,并发送
        /// </summary>
        /// <param name="p_NetAddr"></param>
        /// <param name="p_Data"></param>
        /// <param name="p_ifNeedHeader"></param>
        public void Send(NETADDR p_NetAddr, byte[] p_Data, bool p_ifNeedHeader = true)
        {
            if (!m_Connected)
            {
                if (this.m_StatusStrAction != null)
                {
                    this.m_StatusStrAction("尚未与网络路由服务器建立连接");
                    return;
                }
            }
            try
            {
                List <NETADDR> adrlist = new List <NETADDR>();
                adrlist.Add(p_NetAddr);

                byte[] t_SendData;
                int    length = p_Data.Length;
                if (p_ifNeedHeader)
                {
                    byte[] t_LengthBytes = Int32ToByte(length);
                    t_SendData = new byte[4 + length];
                    t_LengthBytes.CopyTo(t_SendData, 0);
                    p_Data.CopyTo(t_SendData, 4);
                }
                else
                {
                    t_SendData = p_Data;
                }
                SENDMSG tMessage = new SENDMSG(ref t_SendData, ref adrlist);

                if (!m_NetRouterClient.sendMessage(ref tMessage))
                {
                    if (this.m_StatusStrAction != null)
                    {
                        this.m_StatusStrAction("发送错误!");
                    }
                }
                else
                {
                    if (p_Data != this.m_HeartBeatData && p_Data != this.m_HeartBeatReply)
                    {
                        if (this.m_StatusStrAction != null)
                        {
                            this.m_StatusStrAction("成功发送" + length + "字节的数据");
                        }
                    }
                }
            }
            catch (Exception e)
            {
                if (this.m_StatusStrAction != null)
                {
                    this.m_StatusStrAction(e.Message);
                    return;
                }
            }
        }
Exemple #3
0
        static void Main(string[] args)
        {
            NETADDR localaddr = new NETADDR();

            localaddr.bureauCode = 8;
            localaddr.unitType   = 2;
            localaddr.unitId     = 0;
            localaddr.devType    = 1;
            localaddr.devId      = 7;

            NETADDR remote1 = new NETADDR();

            remote1.bureauCode = 8;
            remote1.unitType   = 2;
            remote1.unitId     = 0;
            remote1.devType    = 1;
            remote1.devId      = 5;


            NETADDR remote2 = new NETADDR();

            remote2.bureauCode = 8;
            remote2.unitType   = 2;
            remote2.unitId     = 0;
            remote2.devType    = 1;
            remote2.devId      = 6;

            Console.WriteLine("Sender!!!!!!");
            INetRouterClient netRouterClient = NetRouterClientFactory.CreateNetRouterClient("Test", "172.168.0.1", 9003, "172.168.0.1", 9005, ref localaddr, "");

            while (!netRouterClient.start())
            {
                Console.Write("Start fails.\n");
                Thread.Sleep(10);
            }
            Console.Write("Start succeeds.\n");

            List <NETADDR> adrlist = new List <NETADDR>();

            adrlist.Add(remote1);
            adrlist.Add(remote2);
            string s = "Hello";

            byte[] data = new byte[65000];

            for (int i = 0; i < data.Length; i++)
            {
                data[i] = 1;
            }

            SENDMSG sMessage = new SENDMSG(ref data, ref adrlist);

            while (true)
            {
                if (!netRouterClient.sendMessage(ref sMessage))
                {
                    Console.Write("Send Wrong!\n");
                }
                Thread.Sleep(2000);
            }

            Console.ReadKey();
        }
Exemple #4
0
        static void Main(string[] args)
        {
            NETADDR localaddr = new NETADDR();

            localaddr.bureauCode = 8;
            localaddr.unitType   = 2;
            localaddr.unitId     = 0;
            localaddr.devType    = 1;
            localaddr.devId      = 6;

            INetRouterClient netRouterClient = NetRouterClientFactory.CreateNetRouterClient("Test", "191.168.99.98", 9003, "10.2.48.123", 9005, ref localaddr, "");

            while (!netRouterClient.start())
            {
                Console.Write("Start fails.\n");
                Thread.Sleep(10);
            }
            Console.Write("Start succeeds.\n");
            while (true)
            {
                if (netRouterClient.isNet1Connected() || netRouterClient.isNet2Connected())
                {
                    if (SENDNUM + 1 < SENDNUM)
                    {
                        SENDNUM = 0;
                    }

                    REVMSG         recvMsg  = new REVMSG();
                    List <SENDMSG> sendlist = new List <SENDMSG>();
                    while (netRouterClient.receiveMessage(ref recvMsg))
                    {
                        string revmsgTemp = System.Text.Encoding.Default.GetString(recvMsg.msg, 0, recvMsg.msg.Length);

                        Console.WriteLine("Rev len : " + recvMsg.msg.Length);
                        Console.WriteLine("Rev (" + recvMsg.srcAddr.unitId + ":"
                                          + recvMsg.srcAddr.devId + ")---"
                                          + dataNum(revmsgTemp));

                        //Console.WriteLine("Rev (" + recvMsg.srcAddr.unitId + ":"
                        //                    + recvMsg.srcAddr.devId + ")---"
                        //                    + recvMsg.msg);

                        String ack = (++SENDNUM).ToString();
                        ack += " Hello!";
                        //byte[] tempByte = Encoding.Default.GetBytes(ack);

                        List <NETADDR> adrlist = new List <NETADDR>();
                        adrlist.Add(recvMsg.srcAddr);
                        SENDMSG sMessage = new SENDMSG(ref ack, ref adrlist);

                        sendlist.Add(sMessage);
                        if (!netRouterClient.sendMessage(ref sMessage))
                        {
                            Console.Write("Send Wrong!\n");
                        }
                        else
                        {
                            Console.WriteLine("Send -------- " + ack + " : " + ack.ToString().Length + "\n");
                        }
                    }
                }
                try {
                    Thread.Sleep(10);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    Console.Write(e.Message + "\n");
                }
            }
        }