gpt4 book ai didi

c# - 如何使用 WinRT StreamSockets 接收数据包上传确认?

转载 作者:可可西里 更新时间:2023-11-01 02:32:12 31 4
gpt4 key购买 nike

我有一个 WinRT 应用程序,它使用 StreamSocketDataWriter 执行上传。它跟踪上传所花费的时间,然后计算吞吐量。

我遇到的问题是我获得的吞吐量远高于 Wireshark 显示的吞吐量。这是因为我的上传循环在 WinRT 框架实际将数据发送到网络层之前完成并采用了结束时间戳。我发现无法从框架接收到数据包已实际到达网络层的确认信息。 DataWriter StoreAsync 方法只返回您存储的字节数,我在存储它们之前就知道了。

其他框架,例如 Windows Phone,有一个回调,它会在您的数据包发送后触发,并告诉您您上传了多少字节。我在 WinRT 中没有找到任何等效项,因此不得不接受一个循环来记录我在 StoreAsync 函数中提交的字节数。

有没有办法从框架中确认实际发送到网络层的字节数和时间?

更新:我尝试了@polkduran 的建议,虽然它们有助于减轻一些数据包丢失,但我在较小的文件上传 (100KB) 中仍然遇到严重的数据包丢失。对于较大的文件(4MB 和 10MB),所有数据包都已发送,但结束时间仍相差几秒钟,这会显着影响吞吐量计算(与 Wireshark 跟踪相比)。我的猜测是回调只是稍微减慢了上传速度,而不是提供实际的数据包上传确认。

我仍在寻找解决此问题的方法。

编辑:我就此问题向 Microsoft 创建了支持票。他们的官方回应是,在 WinRT 框架中没有办法确认数据包是否已实际上传。

最佳答案

我没试过,但你可以为 Completed 分配一个处理程序DataWriterStoreOperation 中的回调属性由 StoreAsync 返回DataWritter 的方法对象。

或者

可以直接使用WriteAsync来自 OutputStream 的方法您的属性(property) StreamSocket返回 IAsyncOperationWithProgress操作。

关于c# - 如何使用 WinRT StreamSockets 接收数据包上传确认?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15228067/

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