如何在VB.NET中创建和读取数据包结构?

时间:2013-09-29 01:07:08

标签: vb.net serialization

如何在VB.NET中创建和读取数据包? 我希望创建一个发送某种对象的应用程序,然后让客户端反序列化该对象,并可能建立一个双向通信,客户端发送一条信息,服务器回复一个apt对象它

1 个答案:

答案 0 :(得分:1)

查看 ProtoBuf-Net 。快速,小巧,健壮,有点简单(稀疏的文档)和免费。在SO和at this link上有很多的信息。它会将一些内容序列化为文件或内存流,只需不到10行代码(加上一些类/属性属性)并输出很多,比NET二进制序列化器小很多。基本代码很简单:

    Try
        Dim fs As New FileStream(mUserFile, FileMode.Create, FileAccess.Write)

        Serializer.Serialize(fs, _Profiles)

        fs.Close()
        fs.Dispose()
    Catch ex As Exception
        MessageBox.Show("PBN Error", MsgTitle, MessageBoxButtons.OK, _
                 MessageBoxIcon.Exclamation)
     End Try

在这种情况下,5或6个ListOf项的集合被序列化(即嵌套),但它可以像一个类一样容易。加载/反序列化同样容易。

可能有一种我从未找到过的方法,但是当我尝试类似你所描述的内容时,.NET二进制序列化程序只会反序列化为创建它的同一个程序集类文化类型。这有利于使输出专有项目,非常不利于数据交换。输出也是巨大的(在NET中序列化一个空字典结果为3000字节,而PBN需要300字节)。 NET序列化器更适合的唯一地方是组件被混淆时; MS知道如何获取数据,而不是与班级的其他人共享。即便如此,它只会为流程增加几个步骤。

PBN适用于List Of,Dictionary等所有收集内容,但不会原生地执行矩形,点和大小等操作。编写一个转换器来提供它可以工作的东西并不难(我昨天为Bitmap写了一个)。

VB开发人员最大的缺点是所有的文档,示例和谈话/帮助来自C#。这不仅让一些VB人的眼睛黯然失色,而且让它看起来像是一个C#特定的解决方案。同样,信息(线路类型,数据包等)使其听起来像一个网络数据交换解决方案。实际上,它可以在各种情况下与VB一样好用。