c# - 从 MemoryStream 反序列化对象时出错

标签 c# sockets tcp deserialization memorystream

我正在尝试将序列化对象从客户端发送到服务器,服务器会将其作为字节数组读取,使用字节数组创建内存流,然后使用内存流反序列化。

它第一次正常工作,但是当第一个客户端断开连接而第二个客户端连接并发送对象时,我得到了这个:

二进制流“0”不包含有效的 BinaryHeader。

没有对象类型“”的程序集 ID。

这是错误发生的地方:

    private static async void HandleClient(TcpClient tcpClient)
    {
        NetworkStream networkStream;

        try
        {
            networkStream = tcpClient.GetStream();
            byte[] buff = new byte[1024];

            while (true)
            {
                int recieved = await networkStream.ReadAsync(buff, 0, buff.Length);

                if (recieved == 0)
                {
                    Console.WriteLine("Client disconnected.");
                    break;
                }

                using (MemoryStream memoryStream = new MemoryStream(buff))
                {
                    IFormatter formatter = new BinaryFormatter();
                    object obj = formatter.Deserialize(memoryStream);
                    if (obj is PersonData)
                    {
                        PersonData data = (PersonData)obj;
                        Console.WriteLine($"{data.name} - {data.age} - {data.gender}");
                    }
                }
                Array.Clear(buff, 0, buff.Length);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }
    }

最佳答案

原来问题出在我客户的代码中。我将它直接序列化到网络流,而不是仅仅将对象转换为字节数组并发送该数组。

关于c# - 从 MemoryStream 反序列化对象时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51621772/

相关文章:

java - Java SSLSocket 问题

c# - 确定缓冲区应该有多大

go - 仅通过TCP发送的第一条消息

c++ - IOCP - 发布重叠或读取数据包?

c# - 如何检测一个对象是一个泛型集合,以及它包含哪些类型?

c# - 如何在C#中为变量创建闭包?

c# - 如何在 C# 中使用 system.drawing 将居中文本绘制到 jpg 上

sockets - 每台服务器的套接字连接的实际/硬性限制是多少

c# - 当 localhost :port number is in browser address in iis express 时,web api 显示 403.14 错误

c# - 从套接字读取时