отправить словарь с программированием сокетов с сервера на клиент - PullRequest
2 голосов
/ 09 ноября 2011

Как можно отправить словарь клиенту с сервера?

Я хочу отправить следующий словарь

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

ОБНОВЛЕНИЕ:

Коды не работают. Где моя проблема?Является ли этот подход неправильным?

Пожалуйста, покажите мне правильный код

код на сервере:

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

1 Ответ

0 голосов
/ 10 ноября 2011

Dictionary rates = new Dictionary();?

Исходя из вашего примера кода, я предполагаю, что вы имели в виду Dictionary rates = new Dictionary<string, decimal>();

, так что в любом случае, поскольку вы специально спросили о словаре, я также предполагаю, что вы можетеуже отправлять необработанные данные?В этом случае создайте новый класс:

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

, затем в своем клиенте заполните объект DataToSend и сериализуйте его как

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

И отправьте этот поток через сокет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...