J'ai essayé de demander un similar question récemment mais après plusieurs réponses j'ai réalisé que ce n'était pas la bonne chose à demander. Existe-t-il un guide ou une pratique généralement acceptée pour générer et analyser des paquets réseau basés sur un protocole existant tel que SMPP (protocole de pair à pair de messages courts) ou divers protocoles de chat comme HOTLINE ou IRC? avec C#. Une des réponses a mentionné Google Protocol Buffers et .NET version. Après avoir regardé cela, j'ai réalisé que la sérialisation est extrêmement utile si vous avez le contrôle sur les deux extrémités (client et serveur). Où je serais en suivant les spécifications du protocole.Meilleure pratique: générer et analyser des paquets réseau pour un protocole connu en C#?
Génération Dans le passé, je l'ai fait une classe ou une structure avec des propriétés qui font partie du paquet réseau/protocole:
// PSEUDO CODE
class NetworkObject
{
private int length;
private string data;
// ...
public byte[] GetBytes()
{
// Convert string and int to byte array
return byte array;
}
}
La classe a une méthode byte[] GetBytes() que j'appelle une fois que je l'ai Définissez les propriétés appropriées. Je prends ce tableau d'octets et l'envoie sur le réseau. Dans ma question précédente, l'une des réponses suggérait de stocker les données dans un flux de mémoire ou un bytestream, ce qui semble être une meilleure idée.
Il semble que ma méthode de tableau d'octets est probablement plus lente que de passer un flux réseau à une méthode qui écrit les données de paquet en fonction des propriétés de classe directement dans le flux. C'est ce que je ferai probablement à moins que je manque quelque chose de vraiment gros ici.
Parsing Lors de l'analyse que j'utilise diverses déclarations de cas pour parcourir les différentes et générer un PDUs NetworkObject avec les propriétés appropriées peuplées et faire avec elle comme je l'entends. Pourquoi n'essaieriez-vous pas la sérialisation des objets?
Nous avons vraiment besoin d'une meilleure réponse à cette question! ;) –