首页 > 解决方案 > 如何使用 Uno Platform WebAssembly 连接到本地 WebSocket 服务器

问题描述

以下代码适用于 UWP,但不适用于 WASM。我确实在 WASM 头上安装了 Uno.Wasm.WebSockets 包。

_webSocketConnectionCTS = new CancellationTokenSource();
using (_webSocket = new ClientWebSocket())
{
    try
    {
        await _webSocket.ConnectAsync(new Uri(address), _webSocketConnectionCTS.Token);
        await Receive(_webSocket, _webSocketConnectionCTS.Token);
    }
    catch (Exception ex)
    {
        Console.WriteLine("Failed to connect to WebSocket server: " + ex.Message);
    }
}

连接时抛出异常:“值不能为空”,但两个参数都不为空。

标签: uno-platform

解决方案


该类ClientWebSocket在 Uno 的当前版本中不可用,因为基础类没有为其提供实现。您可以改用该Uno.Wasm.WebSockets包,它使用与ClientWebSocket.

这是文档中的一个示例:

var ws = new Uno.Wasm.WebSockets.WasmWebSocket();

// Connect to a simple echo WebSocket server
await ws.ConnectAsync(new Uri("wss://echo.websocket.org"), CancellationToken.None);

Console.WriteLine("Program: Connected!");

// Send some data
var data = new ArraySegment<byte>(Encoding.UTF8.GetBytes("Hello websocket !"));
await ws.SendAsync(data, System.Net.WebSockets.WebSocketMessageType.Binary, false, CancellationToken.None);

Console.WriteLine("Program: Sent!");

// Read the echo back
var buffer = new byte[1024];
var received = await ws.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);

var receivedString = Encoding.UTF8.GetString(buffer, 0, received.Count);
Console.WriteLine($"Received {received.Count} bytes: {receivedString}");

推荐阅读