VB.NET でパケットを作成して読み取るにはどうすればよいですか? ある種のオブジェクトを送信するアプリケーションを作成し、クライアントにそのオブジェクトを逆シリアル化し、おそらくクライアントが情報を送信し、サーバーが適切なオブジェクトで応答する双方向通信を確立したいと考えていますそれ。
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 などはネイティブに処理しません。動作する何かをフィードするためのコンバーターを作成するのは難しくありません (昨日ビットマップ用に作成しました)。
VB 開発者にとっての最大の欠点は、すべてのドキュメント、サンプル、トーク/ヘルプが C# から/C# 用に提供されていることです。これは一部の VB ユーザーの目を曇らせるだけでなく、C# 固有のソリューションであるかのように見せかけます。同様に、情報 (ワイヤの種類、パケットなど) は、ネットワーク データ交換ソリューションのように聞こえます。実際には、さまざまな状況で VB と同じように機能します。