protobuf.net 反序列化程序无限期等待

protobuf.net De-Serializer waits indefinitely

我有一个简单的 TCPlistener,用于侦听连接,一旦建立连接,一个方法会尝试发送数据,服务器端会尝试读取它。

客户端:

using (NetworkStream stream = new NetworkStream(_client.Client, false))
            {
                Serializer.Serialize(stream, MyPersonObject);
            }

服务器端:

using (NetworkStream stream = new NetworkStream(_client.Client, false))
            {
                var myObject = Serializer.DeSerialize<Person>(stream);
            }

但是,我注意到一旦它遇到 DeSerialize 方法,它就会挂起并无限期地等待。 请注意,使用完全相同的步骤的 BinaryFormatter 不会发生这种情况。我不确定哪里出了问题。

protobuf 流不是“关闭”的 - 默认情况下它一直读取到流的末尾,这意味着它将一直读取到入站 TCP 套接字被标记为完成。

如果您打算发送多条消息,请尝试使用“WithLengthPrefix”版本的序列化和反序列化;为您添加消息框架,使其知道每个有效负载的结束位置。