public byte[] BuildUDPPacket(UpdThreadParam param) { byte[] ipAddr = param.LocalAddr.GetAddressBytes(); if(ipAddr.Length != 4) return null; List<byte> bytePacket = new List<byte>(); bytePacket.Add(0x02); bytePacket.Add(ipAddr[0]); bytePacket.Add(ipAddr[1]); bytePacket.Add(ipAddr[2]); bytePacket.Add(ipAddr[3]); byte[] port = BitConverter.GetBytes((ushort)param.TcpPort); //高字节在前 bytePacket.Add(port[1]); bytePacket.Add(port[0]); ushort VerDataLen = 0; List<byte> byteVer = new List<byte>(); for(int i=0; i< param.lstAllUpdateFile.Count; i++) { byte[] VerData = GetVerData(param.lstAllUpdateFile[i]); if(VerData != null) { byteVer.AddRange(VerData); VerDataLen += (ushort)VerData.Length; } } byte[] byteVerLen = BitConverter.GetBytes(VerDataLen); //高字节在前 bytePacket.Add(byteVerLen[1]); bytePacket.Add(byteVerLen[0]); bytePacket.AddRange(byteVer); bytePacket.Add(0x03); byte xorByte = GetXorValue(bytePacket,1,bytePacket.Count-2); bytePacket.Add(xorByte); return bytePacket.ToArray(); }
private void StartUdpBroadcast(IPAddress localaddr, int nPort, int nPortInData) { IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 0); UdpClient broadcastUdp = new UdpClient(endPoint); IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse("255.255.255.255"), nPort); //后台线程参数 UpdThreadParam ThreadPar = new UpdThreadParam(); ThreadPar.Client = broadcastUdp; ThreadPar.UdpEP = endpoint; ThreadPar.LocalAddr = localaddr; ThreadPar.TcpPort = nPortInData; ThreadPar.lstAllUpdateFile = lstUpdateFile; m_bBackground = true; Thread t = new Thread(new ParameterizedThreadStart(BroadcastThread)); t.IsBackground = true; t.Start(ThreadPar); }