Ejemplo n.º 1
0
        public void Close()
        {
            INetRouterClient t_Client = this.m_NetRouterClient;

            if (t_Client == null)
            {
                return;
            }
            try
            {
                if (t_Client.close())
                {
                    if (this.m_StatusStrAction != null)
                    {
                        this.m_StatusStrAction("连接已断开");
                    }
                    this.m_ThreadClose = true;
                    //Thread th = this.m_ConnectThread;
                    //if (th != null)
                    //    th.Abort();
                    //Thread th2 = this.m_ReceiveThread;
                    //if (th2 != null)
                    //    th2.Abort();
                    this.m_ReceiveThread = null;
                }
            }
            catch (Exception e)
            {
                if (this.m_StatusStrAction != null)
                {
                    this.m_StatusStrAction(e.Message);
                }
            }
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            INetRouterClient client = NetRouterClientFactory.CreateNetRouterClient("Test");

            //NETADDR addr = new NETADDR(8, 1, 0, 1, 3);
            //INetRouterClient client = NetRouterClientFactory.CreateNetRouterClient("Test", "172.168.0.1", 9003, "172.168.0.1", 9005, ref addr, "");

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

            netAddrList.Add(new NETADDR(8, 1, 0, 1, 3));
            StringBuilder sssb = new StringBuilder();

            for (int i = 0; i < 80; i++)
            {
                sssb.Append("AAABB");
            }
            byte[] byteArray = System.Text.Encoding.Default.GetBytes(sssb.ToString());

            client.start();


            #region 加上分包协议之后的发送
            TransMsgByPkgs transfer = new TransMsgByPkgs();

            //发送
            if (transfer.sendMsgByPackages(byteArray, netAddrList, client))
            {
                Console.WriteLine("发送成功!");
            }

            #endregion


            Console.ReadLine();
        }
Ejemplo n.º 3
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);
            }
        }
Ejemplo n.º 4
0
        //组包接收
        public bool receiveMsgByPackages(ref REVMSGBYPACKAGES resMsg, INetRouterClient client)
        {
            int           flag          = 0;
            int           packNum       = 1; //包数
            List <string> rsvPckgs      = new List <string>();
            List <int>    packOrderList = new List <int>();

            REVMSG recvMsg = new REVMSG();

            while (flag < packNum)
            {
                while (client.receiveMessage(ref recvMsg))
                {
                    byte[] sbrsv = recvMsg.msg;
                    packNum = (int)sbrsv[0];
                    int order = (int)sbrsv[1];
                    packOrderList.Add(order);
                    int    len    = (int)(((sbrsv[2] & 0xff) << 8) | (sbrsv[3] & 0xff));
                    byte[] sbtemp = new byte[len];
                    for (int j = 4; j < len + 4; j++)
                    {
                        sbtemp[j - 4] = sbrsv[j];
                    }
                    rsvPckgs.Add(System.Text.Encoding.Default.GetString(sbtemp));
                    ++flag;
                }
            }

            if (flag == packNum)
            {
                int           i     = 0;
                StringBuilder sbres = new StringBuilder();
                while (i < flag)
                {
                    for (int j = 0; j < flag; j++)
                    {
                        if (packOrderList[j] == i)
                        {
                            sbres.Append(rsvPckgs[j]);
                        }
                    }
                    ++i;
                }
                resMsg.msg = sbres.ToString();//接收字符串长度不超过65535?

                return(true);
            }
            else
            {
                return(false);
            }
        }
Ejemplo n.º 5
0
        static void Main(string[] args)
        {
            INetRouterClient client = NetRouterClientFactory.CreateNetRouterClient("Test");

            //NETADDR addr = new NETADDR(8, 1, 0, 1, 3);
            //INetRouterClient client = NetRouterClientFactory.CreateNetRouterClient("Test", "172.168.0.1", 9003, "172.168.0.1", 9005, ref addr, "");

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

            netAddrList.Add(new NETADDR(8, 1, 0, 1, 3));
            StringBuilder sssb = new StringBuilder();

            for (int i = 0; i < 80; i++)
            {
                sssb.Append("AAABB");
            }
            byte[] byteArray = System.Text.Encoding.Default.GetBytes(sssb.ToString());

            client.start();


            #region 加上分包协议之后的接收
            TransMsgByPkgs transfer = new TransMsgByPkgs();

            //接收
            REVMSGBYPACKAGES rsvMsg = new REVMSGBYPACKAGES();
            while (true)
            {
                while (transfer.receiveMsgByPackages(ref rsvMsg, client))
                {
                    string revmsgTemp = rsvMsg.msg;

                    Console.WriteLine(revmsgTemp.Length); //测试数据较大时,这里只显示组包后解析的字符串长度
                    Console.WriteLine(revmsgTemp);        //当测试信息数据比较短时,可以将信息显示出来
                }
            }
            #endregion


            Console.ReadLine();
        }
Ejemplo n.º 6
0
        public void ConnectToServer(string IP1, int Port1, string IP2, int Port2)
        {
            this.m_IP1   = IP1;
            this.m_Port1 = Port1;
            this.m_IP2   = IP2;
            this.m_Port2 = Port2;

            if (this.m_NetRouterClient == null)
            {
                this.m_NetRouterClient = NetRouterClientFactory.CreateNetRouterClient
                                             (this.m_ClientName, this.m_IP1, this.m_Port1, this.m_IP2, this.m_Port2, ref this.m_LocalAddr, "");
            }

            if (this.m_StatusStrAction != null)
            {
                this.m_StatusStrAction("正在连接路由服务器...");
            }
            while (!m_NetRouterClient.start())
            {
                Thread.Sleep(10);
            }
            if (this.m_StatusStrAction != null)
            {
                this.m_StatusStrAction("连接路由服务器成功!");
            }

            m_ThreadClose = false;

            m_ReceiveThread              = new Thread(this.ReceiveThreadMethod);
            m_ReceiveThread.Name         = "接收线程";
            m_ReceiveThread.IsBackground = true;
            m_ReceiveThread.Start();

            if (m_ConnectThread == null)
            {
                m_ConnectThread              = new Thread(this.ConnectionThreadMethod);
                m_ConnectThread.Name         = "保持连接线程";
                m_ConnectThread.IsBackground = true;
                m_ConnectThread.Start();
            }
        }
Ejemplo n.º 7
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", "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");
            REVMSG recvMsg = new REVMSG();

            while (true)
            {
                while (netRouterClient.receiveMessage(ref recvMsg))
                {
                    string revmsgTemp = System.Text.Encoding.Default.GetString(recvMsg.msg, 0, 5);


                    Console.WriteLine(revmsgTemp);
                }
            }



            Console.ReadKey();
        }
Ejemplo n.º 8
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();
        }
Ejemplo n.º 9
0
        private void ConnectionThreadMethod()
        {
            int count = 0;

            while (true)
            {
                try
                {
                    INetRouterClient t_Client = this.m_NetRouterClient;
                    if (t_Client != null)
                    {
                        bool isNet1Connected = t_Client.isNet1Connected();
                        if (this.m_ConnectStatus1 != isNet1Connected)
                        {
                            this.m_ConnectStatus1 = isNet1Connected;
                            if (this.m_Connection1Action != null)
                            {
                                this.m_Connection1Action("网络连接1状态: " + isNet1Connected);
                            }
                        }

                        bool isNet2Connected = t_Client.isNet2Connected();
                        if (this.m_ConnectStatus2 != isNet2Connected)
                        {
                            this.m_ConnectStatus2 = isNet2Connected;
                            if (this.m_Connection2Action != null)
                            {
                                this.m_Connection2Action("网络连接2状态: " + isNet2Connected);
                            }
                        }

                        if (!isNet1Connected && !isNet2Connected)
                        {
                            if (m_Connected)
                            {
                                m_Connected = false;
                                if (this.m_ConnectingAction != null)
                                {
                                    this.m_ConnectingAction(m_Connected);
                                }
                            }
                        }
                        else
                        {
                            if (!m_Connected)
                            {
                                m_Connected = true;
                                if (this.m_ConnectingAction != null)
                                {
                                    this.m_ConnectingAction(m_Connected);
                                }
                            }
                            if (m_ifSendHeartBeat && count % 2 == 0)
                            {
                                foreach (EndPointRecord t_EndPoint in this.m_RemoteAddressMap.Values)
                                {
                                    NETADDR t_Addr = t_EndPoint.m_NetAddr;
                                    t_EndPoint.m_HeartBeatInterval++;
                                    SendHeartBeatData(t_Addr);
                                    if (t_EndPoint.m_HeartBeatInterval > 5)
                                    {
                                        if (this.m_StatusStrAction != null)
                                        {
                                            this.m_StatusStrAction("[" + t_EndPoint.m_AddressStr + "]已断开");
                                        }
                                    }
                                }
                            }
                        }
                    }
                    count++;
                    Thread.Sleep(1000);
                }
                catch (ThreadAbortException e)
                {
                    System.Console.WriteLine(Thread.CurrentThread.Name + "已被要求退出");
                    Thread.ResetAbort();
                }
                catch (Exception e)
                {
                    if (this.m_StatusStrAction != null)
                    {
                        this.m_StatusStrAction(e.Message);
                    }
                }
            }
        }
Ejemplo n.º 10
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");
                }
            }
        }