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
<PackageReference Include="nanoFramework.System.Net.WebSockets.Client" Version="1.1.102" />
paket add nanoFramework.System.Net.WebSockets.Client --version 1.1.102
#r "nuget: nanoFramework.System.Net.WebSockets.Client, 1.1.102"
// 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
欢迎使用 .NET nanoFramework System.Net.WebSockets 库仓库
此 API 尽可能地反映官方 .NET System.Net.WebSockets。异常主要源自 .NET nanoFramework 中缺乏 async
和泛型支持。
构建状态
组件 | 构建状态 | NuGet 包 |
---|---|---|
System.Net.WebSockets | ||
System.Net.WebSockets.Client | ||
System.Net.WebSockets.Server |
示例
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
支持两种消息类型:Text
和 Binary
。《MessageType》属性表示接收到的消息类型。《EndPoint》包含消息发送者的 IPEndPoint。《Buffer》包含实际发送的信息。
注意:为了能够接收分段的消息,用户需要实现自己的逻辑。通过检查 IsFragmented,您可以看到是否正在处理分段消息。《Fragmentation》属性表示您是否正在处理消息的起始、中间或结束部分。
发送消息
可以通过调用 SendString
(用于发送文本消息)或 SendBytes
(用于使用字节数组发送二进制消息)来发送消息。您还可以调用 Send
,该函数接受字节数组和 MessageType
作为参数。
关闭连接
可以通过调用 Close
关闭连接。调用此方法将在行上发送一个关闭消息。您可以选择指定 WebSocketCloseStatus
和关闭原因的描述,以便进行调试。无论何时关闭连接,《Closed》事件都会触发。
服务器
WebSocketServer
是 .NET nanoFramework 的 WebSocket 主机,可以处理多个 WebSocket 连接。服务器可以独立运行或集成到 nanoFramework 的 HttpListener 或 WebServer 中。服务器与客户端实现共享一个常见的 WebSocket 基础。
创建服务器
要启动一个新的服务器,使用可选的 WebSocketServerOptions
创建一个 WebsocketServer
。默认情况下,这将启动本地托管服务器,端口为 80。通过设置 Prefix
和 Port
选项,您可以指定服务器将在哪个端口和前缀下监听。默认前缀为 /
。建议设置 MaxClients
以确保服务器不会耗尽资源。
如果您想要托管一个与websocket服务器交互的webapp,最好直接将websocket服务器与.NET nanoFramework HttpListener 或 WebServer 集成。为此,请将选项 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 HttpListener 或 WebServer 时,您可以通过调用 AddWebSocket
将 HttpListenerContext
传递给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
。请参阅客户端部分的接收消息 和 消息帧 了解如何处理消息。可以检查 MessageFrame
的 Endpoint
属性来识别发送消息的客户端。
发送消息
可以通过调用 SendString
来发送文本消息,或者调用 SendData
来使用字节数组发送二进制消息。您需要指定要发送消息的确切客户端 EndPoint
。如果您想要向所有客户端发送消息,可以使用 Broadcast
并提供一个字节数组或字符串。
停止服务器
您可以通过调用 Stop
来停止websocket服务器。
反馈和文档
有关文档、提供反馈、问题以及了解如何贡献,请参阅主仓库。
加入我们的Discord社区这里。
鸣谢
此项目的贡献者列表可以在贡献者中找到。
许可证
nanoFramework 类库采用MIT许可。
行为守则
本项目已采用贡献者公约中定义的行为守则,以阐明社区中应有的行为。有关更多信息,请参阅 .NET 基金会行为守则。
.NET 基金会
本项目由 .NET 基金会 支持。
产品 | 版本 兼容的和额外的计算目标框架版本。 |
---|---|
.NET Framework | net 兼容。 |
-
- nanoFramework.CoreLibrary (>= 1.15.5)
- nanoFramework.System.Collections (>= 1.5.31)
- nanoFramework.System.Net (>= 1.11.1)
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 |