2011-11-09 117 views
2

如何從客戶端發送字典到客戶端?發送字典與套接字從服務器到客戶端編程

我想做我發送以下字典

Dictionary rates = new Dictionary(); 
     rates.Add("usd", 47.5); 
     rates.Add("eur", 60.4); 
     rates.Add("ukp", 78.8); 

UPDATE:

密碼不work.Where是我的問題嗎?這種方法是否錯誤?

請告訴我正確的代碼

代碼在服務器:

public void GetListn() 
    { 
     var dataToSend = new DataToSend { Rates = new Dictionary<string, decimal>() }; 

     dataToSend.Rates.Add("asd", decimal.Parse("12.23")); 
     dataToSend.Rates.Add("asd", decimal.Parse("41.11")); 
     dataToSend.Rates.Add("asd", decimal.Parse("25.23")); 

     var stream = new MemoryStream(); 
     var formatter = new BinaryFormatter(); 
     formatter.Serialize(stream, dataToSend.Rates); 

     client.Send(stream.ToArray()); 
    } 


public class DataToSend 
{ 
    public Dictionary<string, decimal> Rates { get; set; } 
} 

代碼在客戶端:

 private void WindowLoaded(object sender, RoutedEventArgs e) 
    { 
     try 
     { 
      _server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 

      _server.Connect(_ipep); 

      _server.Send(Encoding.Unicode.GetBytes("GetList")); 

      _data = new byte[BufferSize]; 

      _recv = _server.Receive(_data); 

      var stream = new MemoryStream(_server.Receive(_data)); 
      var formatter = new BinaryFormatter(); 
      var dataToSend = (DataToSend)formatter.Deserialize(stream); 

     } 
     catch (Exception exception) 
     { 
      MessageBox.Show(exception.Message, "Error", MessageBoxButton.OK, 
           MessageBoxImage.Error); 
     } 

    public class DataToSend 
    { 
     public Dictionary<string, string> Rates { get; set; } 
    } 
+0

無答案?????? –

回答

0

Dictionary rates = new Dictionary();

從示例代碼我假定你的意思Dictionary rates = new Dictionary<string, decimal>();

所以無論如何,因爲你specificly被問及字典,我還假設你已經可以發送原始數據?在這種情況下,創建一個新的類:

[Serialisable] 
public class DataToSend 
{ 
    public Dictionary<string, decimal> Rates { get; set; } 
} 

然後在客戶端填寫DataToSend對象,並序列像

var stream = new MemoryStream(); 
var formatter = new BinaryFormatter(); 
formatter.Serialize(stream, DataToSend); 

並通過套接字發送流。

+0

如何將客戶端中的DataToSend轉換爲Dictionary ? –

+0

製作一個類庫「共享對象」或其他東西,並將其包含在兩個項目中。把DataToSend類放在那裏。然後在你的客戶端中,你可以將它反序列化回一個對象。 –

+0

請告訴我如何去做。 –

相關問題