C# .NET アプリケーションの 1 つが bootp サーバーとして機能する必要があります。プロトコルは非常に単純ですが、バイナリ データを構築/解析する簡単な方法がわかりません。
任意のアイデア:
(ソース: tcpipguide.com )
C# .NET アプリケーションの 1 つが 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 クラスを使用して byes のバッファーを保持し、その周りにBinaryWriterを使用してバイナリ データを実際にストリームに書き込むことです。
いずれにせよ、参照する稼働中のサーバーがあると役立ちます。Wireshark や Microsoft Network Monitor などのツールを使用してワイヤ トラフィックをキャプチャし、ワイヤ フォーマットを動作することが知られている例と比較できます。