【发布时间】:2021-11-30 22:01:42
【问题描述】:
我正在用 tcp 制作一个聊天系统的东西,它需要以字节数组的形式发送东西,但是当我将图像转换为字节数组时,发送它然后再转换回来它会给出这个错误:“之前遇到的流结束解析完成。'。使用字符串就可以了。
public byte[] ObjectToByteArray(object obj)
{
BinaryFormatter formatter = new BinaryFormatter();
using (var stream = new MemoryStream())
{
formatter.Serialize(stream, obj);
return stream.ToArray();
}
}
public object ByteArrayToObject(byte[] bytes)
{
using (var stream = new MemoryStream())
{
var binForm = new BinaryFormatter();
stream.Write(bytes, 0, bytes.Length);
stream.Position = 0;
var obj = binForm.Deserialize(stream);
return obj;
}
}
【问题讨论】:
-
发送数据时,连接的接收方总是需要知道数据的结束位置。因此,您可以发送固定长度的消息,使用终止符(不是消息的一部分)终止消息,或者在每条消息之前加上一个字节数。传输协议通常有两层 1) 应用层 2) 传输层。您的代码只有一层。您的大脑可以找出每条消息的结束位置的聊天应用程序。一个应用程序,你必须在代码中添加你的大脑所做的事情。
标签: c# arrays winforms serialization deserialization