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