清除流套接字的输入缓冲区

时间:2015-02-13 07:32:36

标签: c# windows-store-apps

对于流应用程序,当我在函数之间切换时,我需要清除输入缓冲区。我试图执行以下操作,它可以工作但偶尔会抛出异常,因为管道中有大量待处理的数据。 还有另一种方法吗?

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)
    {
    }
}

谢谢!

1 个答案:

答案 0 :(得分:1)

你问的是错误的问题。 “清除”套接字缓冲区是没有意义的。没有可行的方法可以确定已经缓冲了什么。您可以询问DataReader它的想法,但是没有办法知道a)数据是您等待的所有数据,b)数据不包含您可能的其他数据实际上想要保留。

套接字是一个字节流。您确实需要读取每个字节,并仔细决定如何处理每个字节。你不能随意丢弃字节,并期望你的通信保持连贯。

不幸的是,虽然以上解决了您的直接问题(我相信),但当您决定尝试“清除输入缓冲区”时,它很可能无法解决您尝试解决的任何问题。通过以清晰,简洁的方式呈现 问题,准确解释该问题是什么,您已尝试解决的问题以及您希望在解决方案中看到的行为,您将获得最佳服务