gpt4 book ai didi

c#流收到所有数据?

转载 作者:可可西里 更新时间:2023-11-01 08:42:21 24 4
gpt4 key购买 nike

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

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

最佳答案

或者需要协议(protocol)是自终止的(就像 XML 一样,有效 - 当 XML 文档关闭根元素时您知道何时完成接收) 您需要为数据添加长度前缀,或者您需要另一端在完成后关闭流。

在自终止协议(protocol)的情况下,您需要有足够的 Hook ,以便读取代码可以知道它何时结束。使用二进制序列化,您可能没有足够的钩子(Hook)。长度前缀是迄今为止最简单的解决方案。

关于c#流收到所有数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/480319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com