0

What's going on, I do this on the server:

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

then on the client it succesfuly reads the byte = 2 and the switch then routes to function which reads Int32 (FreshChunks.Count) which was equal 4 but when received it equals 67108864. I've tried with Int16-64 and UInt16-64, none of them work out the correct value.

4

1 回答 1

0

鉴于:

  • 在您使用 时msg.Write(2),编译器2int (Int32)
  • 您提到您“成功读取了byte = 2”

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

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

当要求 4 个字节(Int32)时,您得到: 0x04 00 00 00。第一个字节正是您传递的 4。
似乎当请求的msg.Read字节数超过它的字节数时(您请求了 4 个字节,并且由于msg.Write逻辑原因它只有 1 个字节),它执行以下操作之一:

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

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

于 2021-07-12T20:07:39.743 回答