2011-11-09 78 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

请告诉我如何去做。 –

相关问题