我遇到了在W10客户端从StreamSocket接收大量数据的问题。在我们的协议中测试我们的一个数据包期间,反序列化数据存在问题。发现数据被削减并具有260B,尽管在数据包的定义中它应该包含更多数据。使用相同的输入在我们的Windows Phone 8客户端上测试相同的数据包比w10客户端提供更多的数据(大约26kB)。在服务器上检查了向两个客户端发送相同数量的数据。
首次尝试解决方法是将DataReader.LoadAsync()
缓冲区增加到10 MB,但仍会收到相同数量的小数据。然后我使用WireShark检查连接,结果是所有数据都被Windows接收,但只有部分数据被客户端使用。下一次尝试解决问题的方法是在循环中使用DataReader.LoadAsync,但它会在更小的数据包上停止。在这一刻发现,之后可以读取数据包的其余数据。然后使用了Task.Delay(1000)
。它起作用并且收到了所有数据,但这不是一个好的解决方案。我搜索了StackOverflow,微软论坛和谷歌,但没有解决方案。 StackOverflow对该问题的建议没有回答这个问题。
过了一会儿,我试图用循环中的StreamSocket.InputStream
缓冲区读取固定数量的字节,并使用StreamSocket.InputStream.ReadAsync
和所有可能的参数组合。它使用参数InputStreamOptions.Partial
和InputStreamOptions.None
,但在到达数据包末尾时停止在ReadAsync上。我还将StreamSocketListener
与StreamSocket
一起使用,但它也没有用。
问题是使用StreamSockets和DataReader接收大量数据的方法是什么?