【问题标题】:UWP C# .net StreamSocket with User Token in HostNameUWP C# .net StreamSocket 与 HostName 中的用户令牌
【发布时间】:2017-01-03 11:14:28
【问题描述】:

有没有办法格式化 StreamSocket 的主机名以包含用户令牌?当我尝试将 URI 与用户令牌一起使用时,出现“参数不正确”异常。我在 MessageWebSocket 上取得了成功,但我需要一个 StreamSocket,因为它能够(轻松)在 Windows 10 UWP 的后台运行。这是我的代码。任何帮助将不胜感激。

public static async void ConnectToStreamSocket()
    {
        StreamSocket socket = new StreamSocket();
        string hostUri = "//example.myexample.com/websocket/dfkjlkdfskldklfdkddkfdkffjf";
        HostName host = new HostName(hostUri);           
        string proto = "wss";
        await socket.ConnectAsync(host, proto);
    }

【问题讨论】:

    标签: c# uwp access-token hostname stream-socket-client


    【解决方案1】:

    当我尝试将 URI 与用户令牌一起使用时,出现“参数不正确”异常。

    HostName constructor的参数不是URI,而是一个包含hostname或IP地址的字符串。根据hostName参数的描述,它可以包含以下之一:

    • 可由域名系统 (DNS) 或其他命名空间提供商解析的主机名称。
    • 与本地计算机上以下文件中的字符串匹配的主机名称:%WINDIR%\system32\drivers\etc\hosts
    • 包含主机的 IPv4 或 IPv6 网络地址的字符串。

    对于"//example.myexample.com/websocket/dfkjlkdfskldklfdkddkfdkffjf",这是一个不满足上述要求的URI,因此HostName类无法识别它。可以识别example.myexample.com 之类的值。

    为什么你可以成功使用MessageWebSocket类,这是因为MessageWebSocket.ConnectAsync方法需要你提供的URI参数。

    但我需要一个 StreamSocket,因为它能够(轻松)在 Windows 10 UWP 的后台运行。

    WebSockets 为客户端和服务器之间使用 HTTP(S) 通过 Web 进行快速、安全的双向通信提供了一种机制。 Socket 可用于与其他设备通信。它们不是一回事,我们不能简单地将WebSockets 转移到StreamSocket。更多关于uwp中WebSocketsStreamSockets的详细信息请参考官方文档SocketsWebSockets

    但是WebSockets可以在后台使用,你可能不需要StreamSocket。如果您在后台使用 WebSockets,则必须使用ControlChannelTrigger。关于如何使用 WebSockets 和 ControlChannelTrigger 的详细信息请参考ControlChannelTrigger with WebSockets

    【讨论】:

    • 谢谢。我现在正在使用 ControlChannelTrigger,当数据通过 MessageWebSocket 时,它成功触发了我的后台任务。从那以后,我一直在寻找如何将通过套接字接收的数据放入后台任务中,以便我可以处理它。到目前为止,我还没有在网上找到任何解释该过程的内容。
    • @JamesB,请尝试引用this sample。顺便说一句,如果我的回答对您有帮助,请标记为已接受。如果您仍有新问题,可以打开新线程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多