0

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

4

1 回答 1

1

查看ProtoBuf-Net。快速、小巧、健壮、简单(稀疏文档)和免费。这里有很多关于 SO 和这个链接的信息。它将在不到 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 项目的 Collection 被序列化(即嵌套),但它也可以很容易地成为一个类。加载/反序列化同样简单。

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

PBN 适用于所有集合,如 List Of、Dictionary 等,但不会原生处理 Rectangles、Point 和 Size 等。编写一个转换器来为它提供一些可以工作的东西并不难(我昨天为 Bitmap 写了一个)。

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

于 2013-09-29T01:55:52.830 回答