4

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

任何想法:( 来源:tcpipguide.com替代文字

4

2 回答 2

2

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

[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 上的此主题)。
希望这会有所帮助:)

于 2010-02-10T17:12:39.983 回答
1

有几种方法可以做到这一点。您也许可以使用诸如 StructLayout 之类的编组属性来将结构打包到字节数组中,但这可能很棘手并且不值得努力。

您可以使用诸如Protobuf之类的专用框架来为类赋予属性,以便将其序列化以匹配您需要的结构。

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

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

于 2010-02-10T16:48:36.183 回答