当前位置:  开发笔记 > 编程语言 > 正文

c#stream收到了所有数据?

如何解决《c#stream收到了所有数据?》经验,为你挑选了1个好方法。

我正在使用C#.Net和System.Net.Sockets命名空间中的Socket类.我正在使用异步接收方法.我知道这可以通过Web服务更轻松地完成; 这个问题是出于好奇而不是实际需要.

我的问题是:假设客户端正在发送一些未知长度的二进制序列化对象.在我的服务器上使用套接字,我如何知道已收到整个对象并且已准备好进行反序列化?我已经考虑用对象的长度以字节为单位预先添加对象,但在.Net世界中这似乎是不必要的.如果对象大于缓冲区会发生什么?我怎么知道,"嘿,因为对象太大了,要调整缓冲区的大小"?



1> Jon Skeet..:

要么需要协议自我终止(就像XML一样,实际上 - 当您关闭根元素时,您知道何时完成XML文档的接收)或者您需要对数据进行长度前缀,或者您需要另一个结束时关闭流.

在自终止协议的情况下,您需要有足够的挂钩,以便读取代码可以告诉它何时完成.使用二进制序列化,您可能没有足够的钩子.长度前缀是目前最简单的解决方案.

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有