发送 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".
似乎正在发生以下选项之一:
msg.Write
只写入其中至少设置了一位 (=1) 的字节。 (保存space)
msg.Write
总是将给定的参数转换为一个字节。
请求4个字节(Int32)时,
你得到了:
0x04 00 00 00 第一个字节正好是你传的4
似乎当从 msg.Read
询问比它有更多的字节时(你请求了 4 个字节,但由于 msg.Write
逻辑,它只有 1 个)
它执行以下操作之一:
- 用零附加剩余字节
- 继续阅读,在您的情况下,返回给您的邮件元数据中有 3 个 0 字节。
为了解决您的问题,您应该阅读 Write
和 Read
方法的文档并了解它们的行为方式。
怎么回事,我在服务器上做的:
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".
似乎正在发生以下选项之一:
msg.Write
只写入其中至少设置了一位 (=1) 的字节。 (保存space)msg.Write
总是将给定的参数转换为一个字节。
请求4个字节(Int32)时,
你得到了:
0x04 00 00 00 第一个字节正好是你传的4
似乎当从 msg.Read
询问比它有更多的字节时(你请求了 4 个字节,但由于 msg.Write
逻辑,它只有 1 个)
它执行以下操作之一:
- 用零附加剩余字节
- 继续阅读,在您的情况下,返回给您的邮件元数据中有 3 个 0 字节。
为了解决您的问题,您应该阅读 Write
和 Read
方法的文档并了解它们的行为方式。