Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从MemoryStream反序列化对象时出错_C#_Sockets_Tcp_Deserialization_Memorystream - Fatal编程技术网

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

C# 从MemoryStream反序列化对象时出错,c#,sockets,tcp,deserialization,memorystream,C#,Sockets,Tcp,Deserialization,Memorystream,我试图将一个序列化对象从客户端发送到服务器,服务器将把它作为字节数组读取,用字节数组创建内存流,然后使用内存流反序列化 它第一次工作正常,但当第一个客户端断开连接,第二个客户端连接并发送对象时,我得到以下信息: 二进制流“0”不包含有效的BinaryHeader 或 对象类型“”没有程序集ID 这就是发生错误的地方: private static async void HandleClient(TcpClient tcpClient) { NetworkStrea

我试图将一个序列化对象从客户端发送到服务器,服务器将把它作为字节数组读取,用字节数组创建内存流,然后使用内存流反序列化

它第一次工作正常,但当第一个客户端断开连接,第二个客户端连接并发送对象时,我得到以下信息:

二进制流“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);
        }
    }

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

为什么是1024字节?如果序列化对象比这个大呢?我这样做只是为了在我尝试在实际应用程序上实现它之前更好地理解如何通过网络发送对象。我发送的测试对象只包含2个字符串和一个整数,我认为缓冲区大小不是问题,因为它第一次工作,第二次使用的是完全相同的对象。