sockets - 将带有套接字编程的字典从服务器发送到客户端

标签 sockets c#-4.0

如何将字典从服务器发送到客户端?

我要发送以下字典

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

最佳答案

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

并通过套接字发送该流。

关于sockets - 将带有套接字编程的字典从服务器发送到客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8070584/

相关文章:

Python - 一个简单的套接字脚本出错

python - 创建raw socket却报错10013,那么如何制定权限呢?

c - 多线程服务器无法处理多个客户端

c# - XNA 没有添加到我的 Visual C# Express

c# - 将匿名类型添加到 Enumerable<TSource>

c# - Dotnet Windows 服务使用托管代码设置恢复选项

ASP.NET + NUnit : Good unit testing strategy for HttpModule using . NET 4

c - 非阻塞Socket连接总是成功?

asp.net-mvc-3 - 如何使用 MVC3 和 ASP.Net 执行 302 重定向?

objective-c - 简单的 OS X TCP 转发服务器/服务