问题描述
请在服务器端查看以下代码:
NetworkStream ns = clientSocket.GetStream();
BinaryReader reader = new BinaryReader(clientSocket.GetStream());
Person p1 = new Person();
p1.Name = reader.ReadString();
p1.Age = reader.ReadInt32();
p1.Gender = reader.ReadChar();
以及下面的客户端代码:
Person p1 = new Person();
p1.Name = "Bert";
p1.Age = 46;
p1.Gender = 'M';
using (BinaryWriter writer = new BinaryWriter(client.GetStream()))
{
writer.Write(p1.Name);
writer.Write(p1.Age);
writer.Write(p1.Gender);
writer.Write(true);
}
它可以按预期工作,即在服务器上重建对象。
是否有更优雅的方法来做到这一点?即传递整个对象而不是每个字段?这似乎在客户端起作用:
BinaryWriter writer = new BinaryWriter(client.GetStream());
Byte[] bytes = SerializeToBytes<Person>(p1);
writer.Write(bytes);
我已经在服务器端尝试过此操作:
public static object DeserializeFromBytes(byte[] bytes)
{
var formatter = new BinaryFormatter();
using (var stream = new MemoryStream(bytes))
{
return formatter.Deserialize(stream);
}
}
但是,我无法从BinaryReader中获取字节。我已经尝试过了:
reader.ReadBytes((int)reader.BaseStream.Length);
这将导致以下情况:
System.NotSupportedException: 'This stream does not support seek operations.'
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)