gpt4 book ai didi

c# - 从 StreamSocket 读取时 DataReader 结果被截断

转载 作者:太空宇宙 更新时间:2023-11-03 11:15:13 28 4
gpt4 key购买 nike

我有以下 c#/WinRT 代码来接收来自 IMAP 命令的响应

DataReader reader = new DataReader(sock.InputStream);
reader.InputStreamOptions = InputStreamOptions.Partial;
await reader.LoadAsync(1000000);
string data = string.Empty;
while(reader.UnconsumedBufferLength > 0){
data += reader.ReadString(reader.UnconsumedBufferLength);
}

结果在 8192 字节后被截断。 8192 看起来像是某种限制。我该如何解决这个问题?

最佳答案

The abstraction of TCP/IP sockets is a stream of bytes, not a stream of messages ,正如我在我的博客上解释的那样。因此,在部分消息或任意数量的消息之后返回部分 LoadAsync 是完全正常的。

8192 听起来像是巨型帧(千兆以太网)。或者可能是某些 .NET 层的默认读取大小。

无论如何,您所看到的对于 TCP/IP 通信来说是完全正常且可以接受的。您必须循环 LoadAsync(和 ReadString),直到检测到消息结束。我认为 IMAP 使用换行符,至少 一些 它的消息定界符。通常,您必须处理消息在字符串中间结束的情况,但我认为也许可以跳过此 IMAP 检查。

关于c# - 从 StreamSocket 读取时 DataReader 结果被截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12838747/

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