我需要我的 C# .NET 应用程序之一充当 bootp 服务器。该协议非常简单,但我不知道构建/解析二进制数据的简单方法。

有任何想法吗:alt text
(来源: tcpipguide.com)

有帮助吗?

解决方案

有几种方法可以做到这一点。你也许可以玩一下 编组属性 例如 StructLayout 将结构打包到字节数组中,但这可能很棘手并且不值得付出努力。

您可以使用专门的框架,例如 原始缓冲区 以这样的方式属性一个类,它将被序列化以匹配您需要的结构。

但根据我的经验,创建这样的二进制结构的最简单、最快、最灵活的方法是使用 MemoryStream 类来保存字节缓冲区,然后使用 二进制写入器 围绕它实际将二进制数据写入流中。

无论如何,有一个可用的服务器可供参考是有帮助的。使用 Wireshark 或 Microsoft Network Monitor 等工具来捕获有线流量,以便您可以将您的有线格式与已知有效的示例进行比较。

其他提示

可以创建一个简单的结构,如:

[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  
}  

和使用来自本博文序列化/反序列化数据包。但也有可能是因为在编码的差异与服务器名和BootFilename问题,可能需要指定确切FieldOffset每个字段(见的 MSDN上了解详情这个话题)。结果 希望这将帮助:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top