对于流应用程序,当我在函数之间切换时,我需要清除输入缓冲区。我试图执行以下操作,它可以工作但偶尔会抛出异常,因为管道中有大量待处理的数据。 还有另一种方法吗?
private async void ClearBuffer()
{
try
{
DataReader reader = soc.GetReaderStream();
reader.InputStreamOptions = InputStreamOptions.Partial;
uint count = reader.UnconsumedBufferLength;
//if (count > 0)
{
// TODO Buffer overflow exception
await reader.LoadAsync(count);
reader.ReadBuffer(count);
}
}
catch (InvalidOperationException e)
{
}
}
谢谢!
答案 0 :(得分:1)
你问的是错误的问题。 “清除”套接字缓冲区是没有意义的。没有可行的方法可以确定已经缓冲了什么。您可以询问DataReader
它的想法,但是没有办法知道a)数据是您等待的所有数据,b)数据不包含您可能的其他数据实际上想要保留。
套接字是一个字节流。您确实需要读取每个字节,并仔细决定如何处理每个字节。你不能随意丢弃字节,并期望你的通信保持连贯。
不幸的是,虽然以上解决了您的直接问题(我相信),但当您决定尝试“清除输入缓冲区”时,它很可能无法解决您尝试解决的任何问题。通过以清晰,简洁的方式呈现 问题,准确解释该问题是什么,您已尝试解决的问题以及您希望在解决方案中看到的行为,您将获得最佳服务