gpt4 book ai didi

c# - .NET 阻塞套接字读取直到 X 字节可用?

转载 作者:行者123 更新时间:2023-11-30 15:43:20 27 4
gpt4 key购买 nike

假设我在 TCP 上实现了简单的协议(protocol),其中每条消息由以下部分组成:

  1. 指示数据长度的 int
  2. 二进制数据,长度在 1 中指定。

阅读这样的消息我想要这样的东西:

int length = input.ReadInt();
byte[] data = input.ReadBytes(length);

使用 Socket.ReceiveNetworkStream.Read 读取可用的字节数。我希望阻止对 ReadBytes 的调用,直到 length 字节可用为止。

有没有一种简单的方法可以做到这一点,而不必循环读取,在等待剩余数据的偏移处重新启动?

在实际应用程序中,读取可能应该异步完成或在后台线程上完成,但我暂时忽略了这一点。重要的是能够在所有数据可用之前完成读取。

编辑

我知道我可以自己缓冲数据,而且我知道该怎么做。它只是一个围绕 Receive 的循环,在下一个偏移处继续。 我要问的是,是否有这样一个循环的可重用实现,而不需要任何类型的自己的循环(或者在所有数据可用时完成的可重用异步实现)。

最佳答案

某事某处将不得不循环。毕竟,可能需要多个套接字读取。

我相信BinaryReader.Read将一直循环直到它被读取到你所要求的数量或到达流的末尾,但是假设你想在到达流的末尾时抛出异常,我会亲自写一个单独的方法.毕竟,它很容易在一个地方实现并重用。

关于c# - .NET 阻塞套接字读取直到 X 字节可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6793234/

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