2009-03-07 6 views
0

Hallo ich habe ein TCP/IP Socket-Projekt.Codieren/Dekodieren von xxxclass zu Byte [] als Senden an Remote-PC mit C#

Ich kann String-Nachrichten an Server mit Client-Seite senden und ich kann Antworten vom Server abrufen. Aber erhalten Sie eine Zeichenfolge Nachricht und Senden nur eine Zeichenfolge (oder ein anderes Objekt). Ich möchte Personel Klasse zu Byte-Array nach dem Senden an Clients von Server-Seite zu verschlüsseln.Und decodieren. als Werte von meiner Klasse zu bekommen.

// Server-seitigen Code Connect() beginnt um auf Form Last

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(); 
    } 

////////// Client-Seite //////////////

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(); 



    } 

Antwort

1

Werfen Sie einen Blick auf Objektserialisierung. See here für Beispiele. Das sollte dich in die richtige Richtung bringen.

0

Sie können die Protokollpuffer von Google verwenden. Es ist ein schneller und kompakter Mechanismus zum Serialisieren von Objekten. Es gibt zwei Implementierungen unter .NET: protobuf-net und protobuf.

0

Ich würde Objektserialisierung oder XmlSerialization verwenden, beide in .NET verfügbar. Ich würde nicht auf Googles Protokollpuffer schauen, weil diese RPC-Codierung wenig Vorteile gegenüber dem hat, was bereits in .NET ist, aber es ist obskur, besonders in der .NET-Welt und besonders jetzt. Ich würde nicht darauf wetten, dass es für .net devs Mainstream wird. Daher wird der Code durch die Verwendung dieser RPC-Codierung nur noch schwieriger zu warten sein.

Ich sehe nicht wirklich die Notwendigkeit für Protobufs, wenn die apps, die miteinander verbunden sind, homogen sind, und sind nicht auf der Skala von Googles Datacentern. Ich sehe auch keine Notwendigkeit, auch wenn Heterogenität die Regel ist, weil wir bereits JSON und XML haben. Sie sind sowohl lesbar als auch brauchbar, wo Protobufs nicht sind.

In jedem Fall hat .NET, was Sie dafür brauchen, eingebaut.