c# - 如何在 UWP 应用程序中为 StreamSocket.UpgradeToSslAsync 设置超时?

标签 c# sockets ssl uwp

StreamSocket.ConnectAsync、ReadAsync 和 WriteAsync 具有接受 CancellationTokenSource 但不接受 UpgradeToSslAsync 的重载。我怎样才能克服这个?或者,它是有意制作的,超时概念对 SSL 握手没有意义(至少在 UWP 应用程序中),我应该只依赖默认行为吗?

最佳答案

StreamSocket.ConnectAsync, ReadAsync and WriteAsync have overloads accepting CancellationTokenSource

实际上,所有 ConnectAsync StreamSocket 的重载方法不接受 CancellationToken范围。此外,我没有找到 StreamSocketReadAsyncWriteAsync 方法。通常我们使用DataReaderStreamReader用于读取 StreamSocket 的输入流。

我们可以为您提到的连接创建一个CancellationToken,用于超时监控和取消连接。但是我们通过 WindowsRuntimeSystemExtensions.AsTask 来设置它方法将异步操作表示为任务,然后给出一个 CancellationToken。示例代码如下:

socket = new StreamSocket();
HostName hostName = new HostName(host);
CancellationTokenSource _cts = new CancellationTokenSource();
_cts.CancelAfter(5000);
// Connect to the server
await socket.ConnectAsync(hostName, port).AsTask(_cts.Token);
return true;

因此 UpgradeToSslAsync方法你也可以把它作为任务并给出一个 CancellationToken 如下:

await socket.UpgradeToSslAsync(SocketProtectionLevel.PlainSocket, hostName).AsTask(cancellationToken);

关于c# - 如何在 UWP 应用程序中为 StreamSocket.UpgradeToSslAsync 设置超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41139374/

相关文章:

java - Android 套接字接收问题

java - 在证书的帮助下使用 SSL 套接字连接到服务器

android - Oembed Vine Android webview- ssl 错误

ssl - 多域的 HAProxy 动态 SSL 配置

c# - 使用 Linq 解析格式错误的 XML

C# - 如何使用 TaskSchedular 类列出特定用户的计划任务

c# - MVVM 和 Prism 中的超链接可见性

delphi - 在 Delphi 中进行异步套接字编程的惯用方法是什么?

https 子域重定向的 Apache 重写规则

c# - .NET 4.0 C# 初始化字符串不符合登录错误