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); } }
//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; } } }
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(); }
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"); } } }