如何使用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中,ClientWebSocket类不可用,因为基础类未为其提供实现。您可以改用Uno.Wasm.WebSockets程序包,该程序包使用与ClientWebSocket相同的API。

下面是the documentation的示例:

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,received.Count);
Console.WriteLine($"Received {received.Count} bytes: {receivedString}");

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...