0

だから私は基本的なUDPサーバーを持っています.バイト配列をクライアントから送信された方法とまったく同じように復元するなどのいくつかのことを実装しました(順不同で取得された場合)。基本的に、私はクライアント、サーバー、およびタイプを持つ共有クラスライブラリを持っています。そのオブジェクトは、クライアントからサーバーへ、またはその逆に送信できます。だから今、私はいくつかのオブジェクトをシリアライズしてサーバー/クライアントに送信するというアイデアを思いつきました。しかし、適切にデシリアライズするには、受信したオブジェクトのタイプを知る必要があります。この問題を解決するために、次の 2 つのアイデアが浮かびました。

  • 「握手」をしてください。どのオブジェクトが送信されるか、その長さ、クラス名などに関するデータを送信します。その後、実際のデータを取得して逆シリアル化します。私はそれを行うことを知っていますが、UDPであるため、この「ハンドシェイク」が失われる可能性があり、再要求する必要があるため、かなり複雑なロジックとネットワークの過剰使用がありますが、これを実装する方法を知っています.
  • そして2つ目は、ハッシュ値による型の識別です。したがって、クライアントは型のハッシュ値とデータの一部を含むデータを送信します (私は自分の型のオブジェクトのみを送信するので、C# とフレームワークの型にはこれを実装する必要はありません)、このハッシュ値とサーバーで型を決定する必要があります。適切にデシリアライズします。

それで、これを実装する方法はありますか?遅いのでリフレクションを回避できれば完璧です(高速に動作する場合、巨大なswitchステートメントは気にしません)

4

2 に答える 2

0

私が取り組んでいたプロトタイプのために、今日これを行いました。メッセージストリームを次のように定義しました。

最初の4バイト:Int32としてのアセンブリ修飾型名の長さ。

次のnバイト(nは最初の4バイトで指定されます):タイプのアセンブリ修飾名。

メッセージの残りの部分:シリアル化されたオブジェクト

それは魅力のように機能しました。

于 2012-05-24T05:03:12.333 に答える
0

オブジェクト型をオブジェクト データの一部にして、まったく同じロジックを使用して両方を送信するだけです。それらをネットワーク レベルで個別に処理しようとしないでください。

于 2012-05-23T22:57:45.090 に答える