nanoFramework.System.Net.WebSockets.Client 1.1.102

ID 已保留
dotnet add package nanoFramework.System.Net.WebSockets.Client --version 1.1.102                
NuGet\Install-Package nanoFramework.System.Net.WebSockets.Client -Version 1.1.102                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package 版本。
<PackageReference Include="nanoFramework.System.Net.WebSockets.Client" Version="1.1.102" />                
对于支持 包引用 的项目,将此 XML 节点复制到项目文件以引用此包。
paket add nanoFramework.System.Net.WebSockets.Client --version 1.1.102                
#r "nuget: nanoFramework.System.Net.WebSockets.Client, 1.1.102"                
#r 指令可用于 F# Interactive 和 Polyglot Notebooks。将此内容复制到交互式工具或脚本的源代码中,以引用此包。
// Install nanoFramework.System.Net.WebSockets.Client as a Cake Addin
#addin nuget:?package=nanoFramework.System.Net.WebSockets.Client&version=1.1.102

// Install nanoFramework.System.Net.WebSockets.Client as a Cake Tool
#tool nuget:?package=nanoFramework.System.Net.WebSockets.Client&version=1.1.102                

Quality Gate Status Reliability Rating License NuGet #yourfirstpr Discord

nanoFramework logo


欢迎使用 .NET nanoFramework System.Net.WebSockets 库仓库

此 API 尽可能地反映官方 .NET System.Net.WebSockets。异常主要源自 .NET nanoFramework 中缺乏 async 和泛型支持。

构建状态

组件 构建状态 NuGet 包
System.Net.WebSockets Build Status NuGet
System.Net.WebSockets.Client Build Status NuGet
System.Net.WebSockets.Server Build Status NuGet

示例

WebSockets 服务器示例

Server.RgbSample 展示了如何使用 WebSockets 服务器与托管 WebApp 的 Web 服务器一起控制 Atom Lite ESP32 上的 rgb led。

WebSockets 客户端示例

Client.Sample 展示了如何使用 WebSockets 客户端。

WebSockets 服务器和客户端示例

ServerClient.Sample 展示了如何配置和启动 WebSocket 服务器和 (ssl) 客户端。

使用方法

这是一个 .NET nanoFramework 的 WebSocket 客户端和服务器库。WebSocket 主要用于创建需要与网络服务器保持持续连接的交互式 Web 应用程序。在物联网领域中,一些协议需要 WebSocket 连接,例如 SignalR。一些 IoT 服务器也支持或需要通过 WebSocket 运行的协议,例如 MQTT。

客户端

连接到 WebSocket 服务器

要连接到 WebSocket 服务器,创建一个 ClientWebsocket。在初始化时,您可以通过添加 ClientWebSocketOptions 来设置额外的 WebSocket 选项。这些选项可以用于设置特定的 SSL 选项、改变保持活跃间隔、服务器超时,并设置最大发送和接收消息大小。您可以通过调用包含 WebSocket 服务器 uri 的 Connect 来启动连接。WebSocket 的位置始终以 ws://wss:// 开头。您可以使用可选的 ClientWebSocketHeaders 来设置特定的头。

注意:ClientWebSocketOptions.MaxFragmentSize 设置了传出消息的最大包大小。当发送超过最大包大小的消息时,该消息将被自动分成更小的消息。

using System;
using System.Threading;
using System.Net.WebSockets;
using System.Net.WebSockets.WebSocketFrame;
using System.Text;

namespace NFWebsocketTestClient
{
    public class Program
    {
        public static void Main()
        {
            //setup WebSocketClient
            ClientWebSocket websocketClient = new ClientWebSocket(new ClientWebSocketOptions()
            {
                //Change the heart beat to a 30 second interval
                KeepAliveInterval = TimeSpan.FromSeconds(30)
            });

            //Handler for receiving websocket messages
            websocketClient.MessageReceived += WebsocketClient_MessageReceived;
            //Setup custom header
            var headers = new ClientWebSocketHeaders();
            headers["userId"] = "nano";

            //Connect the client to the websocket server with custom headers
            websocketClient.Connect("wss://websocket.nanoFramework.net", headers);

            //Send a message very 5 seconds
            while(websocketClient.State == System.Net.WebSockets.WebSocketFrame.WebSocketState.Open)
            {
                websocketClient.SendString("Hello nanoFramework Websocket!");
                Thread.Sleep(5000);
            }
        }

        private static void WebsocketClient_MessageReceived(object sender, MessageReceivedEventArgs e)
        {
            var client = (ClientWebSocket)sender;

            //If message is of type Text, echo message back to client
            if(e.Frame.MessageType == WebSocketMessageType.Text)
            {
                string message = Encoding.UTF8.GetString(e.Frame.Buffer, 0, e.Frame.MessageLength);
                client.SendString(message);
            }
        }
    }
}
连接状态

可以通过检查 ClientWebSocket 的 State 来监视连接状态。连接建立后,状态设置为 Open。仅当状态为 Open 时,客户端才能发送消息。

接收消息

可以通过为 MessageReceived 设置事件处理器来接收消息。每当接收到消息时,都会调用此处理器。《MesageReceivedArguments》包含一个带有包含消息的缓存的《MessageReceivedFrame》。

消息帧

WebSocket 的 MessageReceivedFrame 支持两种消息类型:TextBinary。《MessageType》属性表示接收到的消息类型。《EndPoint》包含消息发送者的 IPEndPoint。《Buffer》包含实际发送的信息。

注意:为了能够接收分段的消息,用户需要实现自己的逻辑。通过检查 IsFragmented,您可以看到是否正在处理分段消息。《Fragmentation》属性表示您是否正在处理消息的起始、中间或结束部分。

发送消息

可以通过调用 SendString(用于发送文本消息)或 SendBytes(用于使用字节数组发送二进制消息)来发送消息。您还可以调用 Send,该函数接受字节数组和 MessageType 作为参数。

关闭连接

可以通过调用 Close 关闭连接。调用此方法将在行上发送一个关闭消息。您可以选择指定 WebSocketCloseStatus 和关闭原因的描述,以便进行调试。无论何时关闭连接,《Closed》事件都会触发。

服务器

WebSocketServer 是 .NET nanoFramework 的 WebSocket 主机,可以处理多个 WebSocket 连接。服务器可以独立运行或集成到 nanoFramework 的 HttpListenerWebServer 中。服务器与客户端实现共享一个常见的 WebSocket 基础。

创建服务器

要启动一个新的服务器,使用可选的 WebSocketServerOptions 创建一个 WebsocketServer。默认情况下,这将启动本地托管服务器,端口为 80。通过设置 PrefixPort 选项,您可以指定服务器将在哪个端口和前缀下监听。默认前缀为 /。建议设置 MaxClients 以确保服务器不会耗尽资源。

如果您想要托管一个与websocket服务器交互的webapp,最好直接将websocket服务器与.NET nanoFramework HttpListenerWebServer 集成。为此,请将选项 IsStandAlone 设置为 false

要启动websocket服务器,只需调用 Start

WebSocketServer wsServer = new WebSocketServer(new WebSocketServerOptions() { 
                MaxClients = 10,
                IsStandAlone = false
            });

wsServer.MessageReceived += WsServer_MessageReceived;
wsServer.Start();
处理客户端连接

当websocket服务器为自托管时,客户端连接将自动处理并添加到websocket服务器客户端池中。您可以使用 ClientsCount 检查已连接客户端的数量。调用 ListClients 将返回所有已连接客户端的Ip端点数组。

当使用 .NET nanoFramework HttpListenerWebServer 时,您可以通过调用 AddWebSocketHttpListenerContext 传递给websocket服务器来升级websocket请求。如果连接成功建立,AddWebSocket 将返回 true

//webserver receive message event handler
private static void WebServer_CommandReceived(object obj, WebServerEventArgs e)
{
    //check the path of the request
    if(e.Context.Request.RawUrl == "/ws")
    {
        //check if this is a websocket request or a page request 
        if(e.Context.Request.Headers["Upgrade"] == "websocket")
        {
            //Upgrade to a websocket
            _wsServer.AddWebSocket(e.Context);
        }
    }
}
处理新连接

当客户端连接时,将调用 WebsocketOpened 事件。WebserverEventArgs 包含客户端的端点。

处理连接关闭

当客户端连接关闭时,将再次调用 WebsocketClosed 事件,其中在 webserverEventArgs 中包含端点。

关闭客户端连接

您可以通过调用 DisconnectClient 来关闭一个特定的客户端连接。您需要通过提供一个客户端端点来指定要断开的客户端。您还需要指定合适的 WebSocketCloseStatus

接收消息

当接收到任何客户端的消息时,将会引发 MessageReceived。请参阅客户端部分的接收消息消息帧 了解如何处理消息。可以检查 MessageFrameEndpoint 属性来识别发送消息的客户端。

发送消息

可以通过调用 SendString 来发送文本消息,或者调用 SendData 来使用字节数组发送二进制消息。您需要指定要发送消息的确切客户端 EndPoint。如果您想要向所有客户端发送消息,可以使用 Broadcast 并提供一个字节数组或字符串。

停止服务器

您可以通过调用 Stop 来停止websocket服务器。

反馈和文档

有关文档、提供反馈、问题以及了解如何贡献,请参阅主仓库

加入我们的Discord社区这里

鸣谢

此项目的贡献者列表可以在贡献者中找到。

许可证

nanoFramework 类库采用MIT许可

行为守则

本项目已采用贡献者公约中定义的行为守则,以阐明社区中应有的行为。有关更多信息,请参阅 .NET 基金会行为守则

.NET 基金会

本项目由 .NET 基金会 支持。

产品 兼容的和额外的计算目标框架版本。
.NET Framework net 兼容。
兼容目标框架
包含目标框架(在软件包中)
了解更多关于 目标框架.NET Standard 的信息。

NuGet 包 (1)

显示依赖于 nanoFramework.System.Net.WebSockets.Client 的顶 1 个 NuGet 包

下载
nanoFramework.SignalR.Client

此包包含用于 .NET nanoFramework C# 项目的 nanoFramework.SignalR.Client 程序集。

GitHub 代码仓库 (1)

显示依赖 nanoFramework.System.Net.WebSockets.Client 的最受欢迎的顶 1 个 GitHub 代码仓库

代码仓库 星标数量
nanoframework/Samples
🍬 来自 nanoFramework 团队的测试、概念验证和其他探索性工作使用的代码示例
版本 下载 最后更新
1.1.102 65 7/30/2024
1.1.101 54 7/29/2024
1.1.98 234 5/13/2024
1.1.96 63 5/13/2024
1.1.94 103 5/10/2024
1.1.92 158 4/9/2024
1.1.90 100 4/8/2024
1.1.88 180 4/3/2024
1.1.86 122 4/3/2024
1.1.84 439 1/29/2024
1.1.82 328 1/26/2024
1.1.80 329 1/24/2024
1.1.78 340 1/20/2024
1.1.75 706 11/10/2023
1.1.72 478 11/9/2023
1.1.70 466 11/3/2023
1.1.68 541 10/10/2023
1.1.66 501 10/10/2023
1.1.64 532 10/4/2023
1.1.62 606 9/4/2023
1.1.60 544 9/4/2023
1.1.57 984 5/19/2023
1.1.52 1,097 2/17/2023
1.1.50 951 1/24/2023
1.1.48 999 12/28/2022
1.1.45 852 12/27/2022
1.1.41 1,239 11/23/2022
1.1.39 1,566 10/26/2022
1.1.37 896 10/26/2022
1.1.35 902 10/26/2022
1.1.33 1,146 10/25/2022
1.1.30 886 10/24/2022
1.1.28 1,321 10/23/2022
1.1.26 952 10/23/2022
1.1.23 1,653 10/10/2022
1.1.21 930 10/8/2022
1.1.19 938 10/8/2022
1.1.16 1,727 9/22/2022
1.1.14 911 9/22/2022
1.1.12 968 9/22/2022
1.1.10 962 9/22/2022
1.1.8 1,518 9/15/2022
1.1.6 1,555 8/5/2022
1.1.5 1,188 8/4/2022
1.1.4 926 8/4/2022
1.1.2 951 8/4/2022
1.0.1.25 1,165 6/13/2022
1.0.1.23 987 6/9/2022
1.0.1.21 971 6/8/2022
1.0.1.19 1,014 5/27/2022
1.0.1.17 981 5/26/2022
1.0.1.15 980 5/19/2022
1.0.1.13 973 5/18/2022
1.0.1.11 1,030 5/4/2022
1.0.1.9 957 5/3/2022
1.0.1 1,370 3/29/2022
1.0.0-preview.99 129 3/29/2022
1.0.0-preview.98 125 3/28/2022
1.0.0-preview.97 125 3/28/2022
1.0.0-preview.96 123 3/28/2022
1.0.0-preview.95 119 3/28/2022
1.0.0-preview.94 143 3/17/2022
1.0.0-preview.93 125 3/17/2022
1.0.0-preview.92 129 3/14/2022
1.0.0-preview.91 120 3/14/2022
1.0.0-preview.90 122 3/14/2022
1.0.0-preview.89 120 3/14/2022
1.0.0-preview.88 122 3/14/2022
1.0.0-preview.87 129 3/14/2022
1.0.0-preview.86 125 3/9/2022
1.0.0-preview.85 132 3/5/2022
1.0.0-preview.84 128 3/4/2022
1.0.0-preview.83 130 3/3/2022
1.0.0-preview.82 141 3/1/2022
1.0.0-preview.81 137 2/25/2022
1.0.0-preview.80 148 2/18/2022
1.0.0-preview.77 127 2/17/2022
1.0.0-preview.75 152 2/12/2022
1.0.0-preview.74 144 2/7/2022
1.0.0-preview.73 136 2/6/2022
1.0.0-preview.72 139 2/5/2022
1.0.0-preview.71 141 2/4/2022
1.0.0-preview.70 135 2/4/2022
1.0.0-preview.69 171 1/28/2022
1.0.0-preview.68 141 1/28/2022
1.0.0-preview.67 145 1/28/2022
1.0.0-preview.65 398 1/21/2022
1.0.0-preview.64 349 1/21/2022
1.0.0-preview.63 364 1/21/2022
1.0.0-preview.62 343 1/21/2022
1.0.0-preview.61 345 1/21/2022
1.0.0-preview.60 358 1/21/2022
1.0.0-preview.59 368 1/15/2022
1.0.0-preview.58 360 1/13/2022
1.0.0-preview.57 356 1/13/2022
1.0.0-preview.52 147 1/12/2022
1.0.0-preview.50 144 1/6/2022
1.0.0-preview.48 130 12/31/2021
1.0.0-preview.47 148 12/20/2021
1.0.0-preview.40 164 12/5/2021
1.0.0-preview.38 144 12/2/2021
1.0.0-preview.36 154 12/1/2021
1.0.0-preview.33 174 10/27/2021
1.0.0-preview.26 182 6/1/2021
1.0.0-preview.24 187 5/24/2021
1.0.0-preview.20 160 4/6/2021