2013-09-29 102 views
0

如何在VB.NET中創建和讀取數據包? 我希望創建一個應用程序來發送某種類型的對象,然後讓客戶端對該對象進行反序列化,並且可能建立一個雙向通信,客戶端發送一條信息,服務器回覆一個適配對象爲了它。如何在VB.NET中創建和讀取數據包結構?

回答

1

結賬ProtoBuf-Net。快速,小巧,健壯,有點簡單(稀少的文檔)和免費。 關於SO和at this link的信息請點擊。它會以少於10行的代碼(加上一些Class/Property屬性)將某些東西序列化爲文件或mem流,並輸出很多東西,比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適用於列表,字典等所有集合的東西,但本地不會做像矩形,點和大小的東西。編寫一個轉換器來提供一些可行的東西並不難(我昨天爲Bitmap寫了一個)。

VB開發人員最大的缺點是所有文檔,示例和討論/幫助都來自/ for C#。這不僅讓一些VB人的目光黯然失色,而且使它看起來像是C#特有的解決方案。同樣,信息(導線類型,數據包等)使它聽起來像一個網絡數據交換解決方案。實際上,在各種情況下,它都可以和VB一起工作。