Domanda

ho bisogno di una delle mie applicazioni C # .NET di agire come un server bootp. Il protocollo è abbastanza semplice ma non so un modo semplice per costruire / analizzare i dati binari.

Tutte le idee: alt text
(fonte: tcpipguide.com )

È stato utile?

Soluzione

Ci sono un paio di modi per farlo. Potreste essere in grado di giocare con la attributi marshalling come ad esempio StructLayout per il confezionamento di una struttura in un array di byte, ma questo è probabilmente difficile e non vale la pena.

È possibile utilizzare un framework specializzato come Protobuf attribuire una classe in modo tale che possa essere serializzato per abbinare la struttura di cui avete bisogno.

Ma nella mia esperienza, il modo più semplice, più veloce, e il metodo più flessibile di creare una struttura binaria come questo è quello di utilizzare una classe MemoryStream per tenere un buffer di addii, quindi utilizzare un BinaryWriter intorno ad esso realmente di scrivere i dati binari nel flusso.

In ogni caso, aiuta ad avere un server di lavoro di riferimento. Utilizzare uno strumento come Wireshark o Microsoft Network Monitor per acquisire il traffico filo in modo da poter confrontare il formato filo ad un esempio che è noto per lavorare.

Altri suggerimenti

È possibile creare una struttura semplice come:

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

e utilizzando questo codice da questo blogpost per serializzare / deserializzare i pacchetti. Ma ci può essere un problema con ServerName e BootFilename a causa delle differenze di codifica e probabilmente necessario specificare FieldOffset esatta per ognuno dei campi (vedi questo argomento su MSDN per i dettagli).
Spero che questo vi aiuterà:)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top