首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新连接删除的BufferedStream时损坏的NetworkStream

重新连接删除的BufferedStream时损坏的NetworkStream
EN

Stack Overflow用户
提问于 2014-05-23 21:24:05
回答 1查看 235关注 0票数 0

这是风景..。

服务器

  • 我有接受连接的TcpListener服务器
  • 当建立连接时,我将TcpClient.GetStream()包装在一个缓冲流中。
  • 然后,我使用BinaryFormatter反序列化来自流的传入数据。

客户端

  • 我连接到服务器
  • 当连接时,我将TcpClient.GetStream()封装在一个缓冲流中。
  • 然后我使用一个BinaryFormatter来序列化流上的数据。

只要连接保持活动状态,所有工作井都可以工作。我测试了好几个小时。

问题

  • 然后我停止服务器来模拟网络故障(我使用本地主机)
  • 客户端将检测到错误(抛出/处理异常)
  • 客户机稍后将重新连接到一个新的TcpClient和新的BufferedStream
  • 客户端将使用一个新的BinaryFormatter重新开始序列化数据。

但是,现在服务器将得到各种奇怪的反序列化异常。我已经看过流的字节,而令我惊讶的是,流正在被破坏!但只有在重新连接风景之后。并且,摆脱BufferedStream并直接使用NetworkStream解决了这个问题。你可以在没有看到这个问题的情况下多次重新连接。

BufferedStream是怎么回事?每次重新连接,我都会创建一个新的BufferedStream,但是以前的流会对新的流产生怎样的影响呢?

有人见过这样的东西吗?

不幸的是,我不能发布整个代码,但是下面是我正在做的一个例子.

示例服务器代码

代码语言:javascript
复制
while (true)
{//Accept connections and spawn threads to handle incoming connections
     TcpClient connection = server.AcceptTcpClient();
}

//Done on another thread
Stream stream = new BufferedStream(connection.GetStream());
BinaryFormatter formatter = new BinaryFormatter();
object data = formatter.Deserialize(stream);

示例客户端代码

代码语言:javascript
复制
_connection = new TcpClient();
_connection.Connect(_remoteAddress);
NetworkStream netStream = _connection.GetStream();
Stream stream = new BufferedStream(netStream);
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, data);
stream.Flush();

不使用BufferedStream,一切正常。同样,当重新连接上述客户端过程时,重复进行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-29 23:18:42

我已经解决了重新连接的问题,但没有牺牲太多的速度,首先写到MemoryStream,然后调用MemoryStream.WriteTo(流)将数据写入非缓冲的NetworkStream。这个解决方案可以工作,但仍然没有解释BufferedStream问题,而且不太适合发送大型对象,因为在发送任何东西之前,必须对整个对象进行序列化。

仍然不确定BufferedStream的问题是什么。而且,更让人困惑的是,我发现代码在一台机器上运行得完美无缺,而在另一台机器上却没有。可能是司机的问题?

但是,先序列化到一个MemoryStream,然后调用MemoryStream.WriteTo(Stream),对我来说已经足够好了,并且在所有经过测试的机器上运行都很好,所以我就这么做了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23838519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档