如何从WinRT StreamSocket读取所有可用数据并清空inputStream?

时间:2014-12-17 19:51:38

标签: javascript sockets asynchronous windows-runtime

我想在读取新数据之前读取当前在套接字上等待的所有数据。 WinRT中的读取方法都是异步的,因此在套接字为空之前我不能简单地while。 由于我确实要丢弃套接字上的数据,我不想使用阅读器,而是直接从套接字的IInputStream读取数据。

像这样的伪代码:

function emptySocket(inputStream, timeout, buffer) {
  if (!buffer) {
    buffer = new Windows.Storage.Streams.Buffer(4096);
  }
  WinJS.Promise.timeout(timeout, inputStream.readAsync(buffer, 4096, Windows.Storage.Streams.InputStreamOptions.partial)
  .then(function(buffer) {
    if (buffer.length === 0) return;
    emptySocket(inputStream, timeout, buffer);
  }), function (error) {
    return;
  });
}

当套接字上没有任何内容时,超时就会中断等待操作。如果套接字上没有任何内容,Windows.Storage.Streams.InputStreamOptions.partial似乎没有返回。

btw:Windows.Storage.Streams.InputStreamOptions.partialWindows.Storage.Streams.InputStreamOptions.readAhead之间的区别是什么?

0 个答案:

没有答案