我有一个简单的 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/