我需要一个 C# .NET 应用程序作为 bootp 服务器。该协议非常简单,但我不知道构建/解析二进制数据的简单方法。
任何想法:(
来源:tcpipguide.com)
我需要一个 C# .NET 应用程序作为 bootp 服务器。该协议非常简单,但我不知道构建/解析二进制数据的简单方法。
任何想法:(
来源:tcpipguide.com)
您可以创建一个简单的结构,例如:
[Serializable]
[StructLayout(LayoutKind.Sequential, Pack=1)]
public struct MyData {
public byte OpCode;
public byte HardwareType;
public byte HardwareAddressType;
public byte Hops;
public int TransactionId;
public short Seconds;
public short Flags;
public int ClientIPAddress;
public int CurrentIP;
// all other fields in the required sequence
}
并使用这篇博文中的代码来序列化/反序列化数据包。但是由于编码不同,ServerName 和 BootFilename 可能存在问题,并且您可能需要为每个字段指定确切的 FieldOffset(有关详细信息,请参阅msdn 上的此主题)。
希望这会有所帮助:)
有几种方法可以做到这一点。您也许可以使用诸如 StructLayout 之类的编组属性来将结构打包到字节数组中,但这可能很棘手并且不值得努力。
您可以使用诸如Protobuf之类的专用框架来为类赋予属性,以便将其序列化以匹配您需要的结构。
但根据我的经验,创建这样的二进制结构的最简单、最快和最灵活的方法是使用 MemoryStream 类来保存字节缓冲区,然后在它周围使用BinaryWriter将二进制数据实际写入流中。
无论如何,有一个工作服务器可以参考是有帮助的。使用 Wireshark 或 Microsoft Network Monitor 之类的工具来捕获线路流量,以便您可以将线路格式与已知有效的示例进行比较。