2009-03-07 8 views
0

こんにちは私はTCP/IPソケットプロジェクトを持っています。C#でリモートPCに送るよりエンコード/デコードxxxclassをbyte []に​​する

私は文字列メッセージをクライアント側のサーバーに送ることができ、私はサーバーから応答を得ることができます。 しかし、1つの文字列メッセージを取得し、1つの文字列(または他のオブジェクト)を送信します。私は、サーバー側からクライアントに送信した後、バイト配列にPersonelクラスをエンコードしたいと思います。私のクラスから値を取得するよりも。

//サーバ側CODE Con​​nectには、()、フォームのロードに

private void Connect()   
{ 
     // start listen socket 
     dinleyiciSoket = new TcpListener(System.Net.IPAddress.Any, 10048); 
     dinleyiciSoket.Start(); 
     Socket istemciSoketi = dinleyiciSoket.AcceptSocket(); 
     NetworkStream agAkisi = new NetworkStream(istemciSoketi); 
     BinaryReader binaryOkuyucu = new BinaryReader(agAkisi); 
     BinaryWriter binaryYazici = new BinaryWriter(agAkisi); 
     string alinanMetin = binaryOkuyucu.ReadString(); 
     MessageBox.Show(alinanMetin, "Yeni Genelge", MessageBoxButtons.OK); 
     binaryYazici.Write(true); 
     dinleyiciSoket.Stop(); 
     Connect(); 
    } 

//////////クライアント側で開始さ//////////////

private string IpAdresi(string host) 
    { 
     string address = ""; 
     IPAddress[] addresslist = Dns.GetHostAddresses(host); 

     foreach (IPAddress theaddress in addresslist) 
     { 
      if (theaddress.AddressFamily == AddressFamily.InterNetwork) 
      { 
       address = theaddress.ToString(); 
      } 


     } 
     return address; 
    } 

    bool onay; 
    private void button1_Click(object sender, EventArgs e) 
    { 
     //create socket connection 
     Socket istemciBaglantisi = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
     //Bağlantıyı gerçekleştir 
     if (istemciBaglantisi.Connected != true) 
     { 
      istemciBaglantisi.Connect(IPAddress.Parse(IpAdresi(txtHost.Text)), 10048); 
     } 


     agAkisi = new NetworkStream(istemciBaglantisi); 
     binaryYazici = new BinaryWriter(agAkisi); 
     binaryOkuyucu = new BinaryReader(agAkisi); 
     binaryYazici.Write(txtMesaj.Text); 
     onay = binaryOkuyucu.ReadBoolean(); 
     MessageBox.Show(onay.ToString()); 
     istemciBaglantisi.Close(); 



    } 

答えて

1

オブジェクトの直列化を見てください。例についてはSee here。そうすれば正しい方向に進むことができます。

0

Googleのプロトコルバッファを使用できます。オブジェクトをシリアライズするための、高速かつコンパクトなメカニズムです。 .NETには、protobuf-netprotobufという2つの実装があります。

0

.NETで使用できるオブジェクトのシリアル化またはXmlSerializationを使用します。私はGoogleのプロトコルバッファを見ないだろう。なぜなら、RPCエンコーディングは.NETのものよりも利点が少ないからだ。特に.NETの世界、特に今はあいまいだ。私はそれがネットの開発者のための主流になることに賭けていないだろう。その結果、このRPCエンコーディングを使用することによって、コードを保守しにくくするだけです。

相互接続しているアプリケーションが同種で、Googleのデータセンターの規模ではない場合、私はprotobufsの必要性を実際には感じません。私たちはすでにJSONとXMLを持っているので、異質性がルールであっても必要性は見えません。これらは、protobufsが読めない場合でも、読みやすく保守的です。

いずれにしても、.NETにはこれに必要なものが組み込まれています。

関連する問題