这是继承的代码,有时会失败,但我无法弄清楚原因。
using(NetworkStream stream = client.GetStream()) {
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, message_);
if(responseHandler_ != null) {
Message response = (Message) formatter.Deserialize(stream); // <-- fails here
responseHandler_(response, stream);
}
}
我用Google搜索了它。我试过寻求建议,但NetworkStream无法寻求。
编辑:它并不总是失败。只是偶尔。 非常感谢任何帮助。
答案 0 :(得分:0)
在这种情况下,我建议您将NetworkStream
复制到可以寻求的MemoryStream
- 您可以找到非常好的示例here。
使用MemoryStream
,您可以在序列化后重置流的位置
using(var ms = new MemoryStream(stream) {
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms , message_);
if(responseHandler_ != null) {
ms.Location = 0;
Message response = (Message) formatter.Deserialize(ms);
responseHandler_(response, ms);
}
}
答案 1 :(得分:0)
问题出在发送方。添加“逗留”选项解决了它。
client.LingerState = new LingerOption(true,10);