发送 Int32 等于 4,收到等于 67108864

Sending Int32 equal to 4, received as equal to 67108864

怎么回事,我在服务器上做的:

var msg = Server.Api.CreateMessage();           
msg.Write(2);
msg.Write(FreshChunks.Count());
Server.Api.SendMessage(msg, peer.Connection, NetDeliveryMethod.ReliableUnordered);

然后在客户端上它成功读取字节 = 2,然后交换机路由到读取 Int32 (FreshChunks.Count) 的函数,它等于 4,但在收到时等于 67108864。我试过使用 Int16 -64 和 UInt16-64,其中 none 个计算出正确的值。

鉴于:

  • 在您对 msg.Write(2) 的使用中,编译器将 2 读取为 int (Int32)
  • 您提到您 "成功读取了 byte = 2".

似乎正在发生以下选项之一:

  1. msg.Write 只写入其中至少设置了一位 (=1) 的字节。 (保存space)
  2. msg.Write 总是将给定的参数转换为一个字节。

请求4个字节(Int32)时, 你得到了: 0x04 00 00 00 第一个字节正好是你传的4
似乎当从 msg.Read 询问比它有更多的字节时(你请求了 4 个字节,但由于 msg.Write 逻辑,它只有 1 个) 它执行以下操作之一:

  1. 用零附加剩余字节
  2. 继续阅读,在您的情况下,返回给您的邮件元数据中有 3 个 0 字节。

为了解决您的问题,您应该阅读 WriteRead 方法的文档并了解它们的行为方式。