| 查看: 416 | 回复: 0 | ||
[求助]
用C#编写的OSPF路由协议的五种报文,以下是包头处理部分,看不懂,求高人指点!
|
|
具体内容部分如下,求高手补全 #region 包头处理 public bool SetPacketLength(int len) { if (len <= 24) return false; if (packet == null) return false; if (packet.Length <= 24) return false; packet[2] = (byte)(len % 256); packet[3] = (byte)(len >> 8); return true; } public bool SetRouterId(byte[] routeId) { if (routeId == null) return false; if (routeId.Length != 4) return false; if (packet == null) return false; if (packet.Length <= 24) return false; for (int i = 0; i < 4; i++) packet[i + 4] = routeId; return true; } public bool SetAreaId(byte[] areaId) { if (areaId == null) return false; if (areaId.Length != 4) return false; if (packet == null) return false; if (packet.Length <= 24) return false; for (int i = 0; i < 4; i++) packet[i + 8] = areaId; return true; } public bool checksum(byte[] packet) { if (packet == null) return false; if (packet.Length <= 24) return false; packet[12] = packet[13] = 0; MemoryStream memStream = new MemoryStream(packet, 0, packet.Length); BinaryReader br = new BinaryReader(memStream); Int32 sum = 0; UInt16 val; while (memStream.Position < memStream.Length - 1) { val = (UInt16)IPAddress.NetworkToHostOrder(br.ReadInt16()); sum += val; } // if we have a remaining byte we should add it if (memStream.Position < packet.Length) { sum += br.ReadByte(); } // fold the sum into 16 bits while ((sum >> 16) != 0) //sum = (sum>>16) + (sum&0xffff); sum += (sum>>16); { sum = (sum & 0xffff) + (sum >> 16); } int cs = ~sum & 0xFFFF; packet[12] = (byte)(cs % 256); packet[13] = (byte)(cs >> 8); return true; } public bool SetPacketHeadFields() { if (!SetPacketLength(len)) return false; if (!SetRouterId(routeId)) return false; if (!SetAreaId(areaId)) return false; if (!checksum(packet)) return false; return true; } |
» 猜你喜欢
362求调剂
已经有14人回复
求调剂 302分初试 0854
已经有4人回复
299求调剂
已经有4人回复
266分,一志愿电气工程,本科材料,求材料专业调剂
已经有3人回复
312求调剂
已经有4人回复
315求调剂
已经有7人回复
土木304求调剂
已经有3人回复
316求调剂
已经有16人回复
一志愿华东理工大学,080500学硕,317分,求调剂
已经有13人回复
材料与化工306分找调剂
已经有9人回复














回复此楼