【问题标题】:Couldn´t hande App Crash on a SocketStream if the Connection accidently drops如果连接意外断开,则无法处理 SocketStream 上的应用程序崩溃
【发布时间】:2017-09-09 00:50:28
【问题描述】:

我有一个小工具,可以轻松地将文件从我的手机 (Windows 10) 传输到 PC。只是一个文件,快速,无线,无需搜索文件夹。只需“共享”>,所有其他客户端将显示文件以供下载。首先使用 Internet 服务器作为“缓存”。现在我将这个想法扩展到 WLAN/LAN。我选择构建自己的解决方案,无需 HTTP 或 FTP。只是 TCP/IP 上的字节。第一个测试解决方案效果很好。我在缓冲区、大小、连续流方面玩了很多。我还在 GarbageCollector 中找到了一个不错的小方法 - 现在我的旧的、缓慢的 Lumia 640 传输最大的文件而不会耗尽内存(在 150 到 out_of_memory 之前使用最大 33MB 并且完美的缓冲区大小使这款手机达到我的 WLAN 最大值。传输速率. 不敢相信,

但有一件事我无法处理..

如果连接意外掉线,应用程序接收部分中的此行将强制执行 一个 TaskAwaiter 异常,立即,看起来比我处理它的速度要快得多。我尝试了使用同步变体、异步、Task.Run()、TaskFactory.RunAsync 的一切。我从未见过 UWP 应用程序崩溃得如此之快 “inStream”是基于意外的socketconnection和Excep。抛出 .CopyToAsync()。

TaskAwaiter 异常本身如何处理还是有其他方法?

private async void SocketListener_ConnectionReceived(Windows.Networking.Sockets.StreamSocketListener sender, Windows.Networking.Sockets.StreamSocketListenerConnectionReceivedEventArgs args)
        {
            socketListener.ConnectionReceived -= SocketListener_ConnectionReceived;
            await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            {
                tb_status.Text = "incoming Connection... receiving the file... Please wait until it´s done....";
            });
            try
            {
                Stopwatch stoppUhr = new Stopwatch();
                stoppUhr.Start();

                Stream inStream = args.Socket.InputStream.AsStreamForRead();
                StorageFile outFile = await ApplicationData.Current.LocalCacheFolder.CreateFileAsync("theTestFile.wav", CreationCollisionOption.ReplaceExisting);
                Stream fileWriteStream = await outFile.OpenStreamForWriteAsync();

这是案例异常出现在这一行,在副本 - 任务

await inStream.CopyToAsync(fileWriteStream);
fileWriteStream.Dispose();
inStream.Dispose();

double elapsedSeconds = stoppUhr.Elapsed.TotalSeconds;
stoppUhr.Stop();
stoppUhr = null;
double recSizeMB = (await outFile.GetBasicPropertiesAsync()).Size / 1024 / 1024;
double mBitPerSec = recSizeMB * 8 / elapsedSeconds;

【问题讨论】:

标签: c# windows sockets uwp


【解决方案1】:

**这是一个 WINDOWS 预览问题.... :) 感谢您的帮助 :) **

几天后,我的应用程序就有了它的第一个 alpha-Launch :)) QuickTransfer for OneDrive and LAN / WLAN (W10 UWP) - future-STORE link

for You :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    相关资源
    最近更新 更多