从 MemoryStream 反序列化对象时出错
Error deserializing objects from 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);
}
}
原来问题出在我客户的代码中。我将它直接序列化到网络流,而不是仅仅将对象转换为字节数组并发送数组。
我正在尝试将序列化对象从客户端发送到服务器,服务器会将其作为字节数组读取,使用字节数组创建内存流,然后使用内存流反序列化。
它第一次正常工作,但是当第一个客户端断开连接而第二个客户端连接并发送对象时,我得到了这个:
二进制流“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);
}
}
原来问题出在我客户的代码中。我将它直接序列化到网络流,而不是仅仅将对象转换为字节数组并发送数组。