gpt4 book ai didi

c# - 通过 tcpclient 发送序列化对象的问题

转载 作者:太空宇宙 更新时间:2023-11-03 19:32:40 25 4
gpt4 key购买 nike

我试图通过 tcpclient 从服务器向客户端发送一个对象,但出现错误。首先,这里是包类:

[Serializable()]
public class pack
{
public int a;
}

这是服务器的发送代码(它的命名空间是 WindowsFormsApplication1):

                pack pachet = new pack();
pachet.a = 3;
IFormatter bformatter = new BinaryFormatter();
NetworkStream ntstream = tcpClient.GetStream();
bformatter.Serialize(ntstream, pachet);

和客户端的“翻译”代码(它的命名空间是 WindowsFormsApplication2):

            NetworkStream strm = client.GetStream();
IFormatter bformatter = new BinaryFormatter();
pack nettmp = (pack)bformatter.Deserialize(strm);

错误是:

serializationException was unhandeled. Unable to find assembly 'WindowsFormsApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

谁能告诉我问题出在哪里?

最佳答案

好吧,正如错误消息所说,您的服务器找不到 WindowsFormsApplication1 程序集。

它在客户端吗?如果您没有包含要反序列化的类型的所有程序集,您将无法使用二进制反序列化。

请注意,命名空间是无关紧要的 - 您将无法仅仅因为客户端程序集中有一个具有相同名称的类型而反序列化一个对象。程序集名称嵌入在序列化数据中。

(就我个人而言,我并不是非常热衷于使用默认的 .NET 二进制序列化作为开始,因为它在向后和向前版本控制方面非常脆弱,但这是另一回事。如果您对替代方案感兴趣,您可能想要查看基于文本的格式,例如 XML、YAML 和 JSON,或二进制格式,例如 Thrift 和 Protocol Buffers。)

关于c# - 通过 tcpclient 发送序列化对象的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4067345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com