| 查看: 412 | 回复: 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; } |
» 猜你喜欢
“人文社科而论,许多学术研究还没有达到民国时期的水平”
已经有4人回复
过年走亲戚时感受到了所开私家车的鄙视链
已经有11人回复
什么是人一生最重要的?
已经有4人回复
版面费该交吗
已经有3人回复
今年春晚有几个节目很不错,点赞!
已经有12人回复
体制内长辈说体制内绝大部分一辈子在底层,如同你们一样大部分普通教师忙且收入低
已经有12人回复
基金正文30页指的是报告正文还是整个申请书
已经有5人回复













回复此楼