10
votes

Protocole Définition Langue

Quelle définition de protocole recommandez-vous? J'ai évalué les tampons de protocole de Google, mais cela ne me permet pas de contrôler le placement de champs dans le paquet en cours de construction. Je suppose que la même chose est vraie pour l'épargne. Mes exigences sont les suivantes:

  1. Spécifiez l'emplacement des champs dans le paquet
  2. Autoriser les champs de bits
  3. Conditionnements: un drapeau (champ de bit) = True signifie que les données peuvent apparaître sur un emplacement ultérieur dans le paquet
  4. Possibilité de définir une structure de paquets en faisant référence à une autre définition de paquets

    Merci.

    (" saveur " sur Sourceforge, utilisé pour la définition de MPEG-4 pourrait être candidat, mais je Je cherche quelque chose qui semble avoir plus d'une communauté et fonctionne de préférence dans un environnement .NET.)


0 commentaires

3 Réponses :


0
votes

Que diriez-vous de C # fort> lui-même?

EG P>

class MySimplePDLData {
  // format: name (or blank if padding), bit length, value (or blank if data),
  // name of presence flag field (or blank if no presence flag), C# type
  // one packet type per string, fields separated by pipes (|)
  string[] pdl = {

// MY-SIMPLE-PDL-START

  ",8,0xf8,|version,8,,Int32|type,8,,Int32|id1,64,,Int64",
  ...

// MY-SIMPLE-PDL-END

  };
}


0 commentaires

3
votes

Je serais intéressé par les raisons de vos besoins. Pourquoi avez-vous besoin de contrôler la position des champs? Pourquoi les champignons sont-ils importants? Conditionnels?

On dirait que vous avez un format de fil fixe (plus ou moins) pour lequel vous devez écrire un analyseur et, dans ce cas, aucun des formats de protocole / sérialisation populaires existants (protobufs, tompe, JSON, YAML, etc. .) Travaillera pour vous.

Une approche quelque peu peu orthodoxe consiste à utiliser erlang ou Haskell , qui ont tous deux un bon soutien pour Protocoles binaires d'analyse .


1 commentaires

Je dois contrôler la position des champs car la défense du protocole que nous travaillons avec demande. Les champs de bit sont importants, encore une fois parce que le protocole définit cela. Les conditionnels sont nécessaires car un ensemble de champs peut exiger qu'un autre champ soit créé. Je vérifierai votre avance sur Erlang et Haskell.



6
votes

Jetez un coup d'œil à ASN.1 http://es.wikipedia.org/wiki/astn .1

Fooprotocol Définitions :: = COMMENCE P>

- Bit detail
- ordered content
- type references
- not sure, about conditions


1 commentaires

Juste pour être clair, ASN.1 ne définit pas un protocole , juste la disposition des données. Si vous souhaitez vraiment spécifier des protocoles, vous devez indiquer la séquence d'échanges de messages valides possibles. Vous pouvez faire ce FSA si le protocole est "simple"; Sinon, envisagez d'utiliser des filets de Pétri colorés.