2009-08-19 12 views
2

C#でネットワークパケット通信を処理する最良の方法を説明する優れたガイドや書籍があるのでしょうか?C#でネットワークパケット構造体/クラスを作成する最良の方法は何ですか?

今は構造体の値に基づいてバイト配列を生成する構造体とメソッドを使用しています。

これを行う簡単な方法はありますか?それとももっと良い方法?その向こう

public struct hotline_transaction 
{ 
     private int transaction_id; 
     private short task_number; 
     private int error_code; 
     private int data_length; 
     private int data_length2; 

...

 public int Transaction_id 
     { 
      get 
      { 
       return IPAddress.HostToNetworkOrder(transaction_id); 
      } 
      set 
      { 
       transaction_id = value; 
      } 
     } 

...

 public byte[] GetBytes() 
     { 
      List<byte> buffer = new List<byte>(); 
      buffer.Add(0); // reserved 
      buffer.Add(0); // request = 0 

      buffer.AddRange(BitConverter.GetBytes(Task_number)); 
      buffer.AddRange(BitConverter.GetBytes(Transaction_id)); 
      buffer.AddRange(BitConverter.GetBytes(error_code)); 


      buffer.AddRange(BitConverter.GetBytes(Data_length)); 

      buffer.AddRange(subBuffer.ToArray()); 

      return buffer.ToArray(); // return byte array for network sending 
     } 
} 

使用可能な構造/クラスにネットワークデータを解析するのがベストプラクティスに良いガイドや記事はありますか?

+0

おそらく私は既に確立されているプロトコルを扱っていることを明確にすべきでした。 –

答えて

2

google protocol buffersについて聞いたことがありますか?

プロトコルバッファはそのデータ コミュニケーションの多くを Googleが使用 バイナリシリアル化形式の名前です。なるように設計されています。サイズは

小さな - プロセスへの格安効率的なデータストレージ (XMLよりもはるかに小さい) - クライアントでと サーバ・プラットフォームに依存しない両方 - ポータブル アーキテクチャ拡張可能な異なるプログラミングの間 - 追加します古いメッセージへの新しい データ

+0

さて、いくつかの属性を追加するだけで既存のクラスにレトロフィットすることができるそのAPIのC#実装があったならば...(咳); - p –

2

よく、Write(Stream)を使用するように誘惑されていますが、それが大きい場合には... ...しかし、一般的なケースでは、このためのシリアル化APIがあります。私は人々がそれを聞いて退屈だと思う。

IMO、hotline_transactionは、classstructより)のように見えますが、btwです。

+0

+1クラス/構造体の区別。変更可能な構造体は悪悪です。 –

+0

私はなぜ構造体を使用したのか分かりませんが、それは簡単にクラスであり、実際には構造体とクラスの違いを見てから、このクラスをより理にかなっています。 –

0

あなたは、おそらくこのためBinaryWriterを使用する必要があり、むしろbyte[]を返すよりも、あなたはすなわち、シリアル化コードにBinaryWriterを渡す必要があり、

BinaryWriterで既存のStreamを簡単にラップすることができます。何とかbyte[]を取得する必要がある場合は、MemoryStreamをバッキングストリームとして使用し、完了したらToArrayに電話することができます。

関連する問題