c# - protobuf.net De-Serializer 无限期等待

标签 c# protocol-buffers protobuf-net

我有一个简单的 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”版本的序列化和反序列化;为您添加消息框架,使其知道每个有效负载的结束位置。

关于c# - protobuf.net De-Serializer 无限期等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65766279/

相关文章:

c# - 闪屏上的淡入淡出效果

php - 在 'Google\Protobuf\Internal\Message' 中找不到类 "Message.proto"

.net - 如何使用 RuntimeTypeModel 将 ProtoInclude 与 protobuf-net 中的类型关联起来?

c# - 每次在面板中关闭任何其他用户控件时添加默认用户控件

C#在重定向的HttpWebRequest中发送cookie

c# - 从 .Net System.DateTime 生成 Google Protobuf 时间戳

C++ 网络序列化

c# - 编译 protobuf-net 生成的代码时出错

java - 在 gRPC 中使用直接类以避免数据复制

c# - 在浏览器关闭时更新数据库