| 查看: 432 | 回复: 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; } |
» 猜你喜欢
26/27申博自荐
已经有10人回复
东北林业大学材料科学与工程学院“一流”A+学科国家级人才团队课题组招收2026级博士生
已经有3人回复
医学类期刊求推荐
已经有5人回复
生活琐事由它去
已经有4人回复
提交了我也来说说感想
已经有12人回复
青B发送上会通知了吗
已经有9人回复
西安交大新媒学院副院长用撤稿论文结题
已经有6人回复
论文撤稿了
已经有8人回复
化学专业申博
已经有4人回复
某211大学教师把个人教师官方主页改成:我跑了我跑了我跑了!官宣跑路!
已经有5人回复












回复此楼