如何通过哈希值识别类型?

时间:2012-05-23 22:20:10

标签: c# serialization hash udp client-server

所以我有基本的UDP服务器,我已经实现了一些事情,比如恢复字节数组的确切方式是由客户端发送的(如果它是无序检索的)。 Bassicaly,我有客户端,服务器和共享类库,类型,对象可以从客户端发送到服务器,反之亦然。所以现在我想出了序列化一些对象并发送到服务器/客户端的想法。但是我需要知道接收了什么类型的对象来正确地反序列化它。为解决这个问题,我想到了两个想法:

  • 进行“握手”。发送有关将要发送的对象,其长度,类名等的数据。然后再检索实际数据并对其进行反序列化。我知道这样做,但由于它是UDP,这种“握手”可能会丢失,我需要重新询问它,因此有相当复杂的逻辑和网络过度使用,但我知道如何实现它。
  • 第二个是通过某个哈希值识别类型。所以客户端发送的数据包含类型和数据的哈希值(我只发送自己类型的对象,所以不需要为C#和Framework类型实现这个),我需要通过这个哈希值确定类型,服务器可以正确地实现它。

那么任何想法,如何实现这个?如果我设法避免反射,那将是完美的,因为它很慢(如果它运行得更快,我不关心巨大的switch语句)

2 个答案:

答案 0 :(得分:0)

只需将对象类型作为对象数据的一部分,然后使用完全相同的逻辑发送它们。不要试图在网络级别单独处理它们。

答案 1 :(得分:0)

我今天就这样做了我正在研究的原型。我这样定义了我的消息流:

前4个字节:程序集限定类型名称的长度为Int32。

接下来的n个字节(其中n由前4个字节给出):类型的程序集限定名称。

其余信息:序列化对象

它就像一个魅力。