主机名中有用户令牌的UWP C#.net StreamSocket



是否有方法格式化StreamSocket的HostName以包含用户令牌?当我尝试将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);
}

当我尝试将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可用于与其他设备通信。它们不是相同的东西,我们不能简单地将WebSockets转移到StreamSocket。关于uwp中WebSocketsStreamSockets的更多详细信息,请参考官方文件SocketsWebSockets

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

最新更新