2009-03-07 12 views
0

Merhaba, bir TCP/IP Soket projem var.Xxxclass'ı byte [] ile kodlayın ve C# ile Uzaktan Bilgisayara yollayın. #

İstemci tarafında Sunucuya dize mesajları gönderebilir ve sunucudan yanıt alabilirim. Ama bir dize iletisini alıyorum ve yalnızca bir dize (veya başka bir nesneyi) gönderiyorum. İstemci sunucu tarafında istemciler gönderdikten sonra, Kişisel sınıfı, Byte dizisine Encode olarak kodlamak istiyorum. sınıfımdan değerler almaktan daha iyi.

// SUNUCU YAN KOD Bağlan() Form yükü

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

////////// istemci tarafında başlar //////////////

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



    } 

cevap

1

Nesne serileştirmesine göz atın. Örnekler için See here. Bu doğru yönde gitmene gerek.

0

Google'ın protokol arabelleklerini kullanabilirsiniz. Nesneleri serileştirmek için hızlı ve kompakt bir mekanizmadır. .NET üzerinde iki uygulama vardır: protobuf-net ve protobuf.

0

Her ikisi de .NET'te kullanılabilen nesne serileştirme veya XmlSerialization kullanırdım. Google'ın protokol arabelleklerine bakmayacağım, çünkü bu RPC kodlaması, .NET'de olandan çok az avantajlıdır, ancak özellikle .NET dünyasında ve özellikle de şimdi, belirsizdir. .net devleri için ana akım haline geldiğine bahse girmezdim. Sonuç olarak, kodunuzu yalnızca bu RPC kodlamasını kullanarak sürdürmek için zorlaştırırsınız.

Aralarında bağlanan uygulamalar homojen olduğunda ve Google'ın veri merkezlerinin ölçeğinde DEĞİLDİR, protobuf ihtiyacını gerçekten görmüyorum. Ayrıca heterojenliğin kural olduğu durumlarda bile ihtiyacı görmüyorum çünkü zaten JSON ve XML var. Protobufların bulunmadığı hem okunabilir hem de hizmet verilebilir.

Her durumda. NET'in bunun için ihtiyacınız olan şey, yerleşiktir.

İlgili konular