0

Is there a way to format the HostName for a StreamSocket to include a user token? I get a "Parameter is Incorrect" exceptions when I try to use a URI with the a user Token. I have had success with a MessageWebSocket but I need a StreamSocket because it is able to (easily) run in the background on Windows 10 UWP. Here is my code. Any help would be greatly appreciated.

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);
    }
4

1 回答 1

0

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

HostName 构造函数的参数 不是一个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可用于与其他设备通信。它们不是同一个东西,我们不能简单地转移WebSocketsStreamSocket. 更多关于uwp的详细信息请参考官方文档WebSockets和.StreamSocketsSocketsWebSockets

但是WebSockets可以在后台使用,你可能不需要StreamSocket. 如果您在后台使用 WebSocket,则必须使用ControlChannelTrigger。有关如何将 WebSockets 与 ControlChannelTrigger 一起使用的详细信息,请参考ControlChannelTrigger 与 WebSockets

于 2017-01-03T03:14:28.447 回答