nanoFramework.System.Net.Sockets.UdpClient 1.1.65
ID 预留
dotnet add package nanoFramework.System.Net.Sockets.UdpClient --version 1.1.65
NuGet\Install-Package nanoFramework.System.Net.Sockets.UdpClient -Version 1.1.65
<PackageReference Include="nanoFramework.System.Net.Sockets.UdpClient" Version="1.1.65" />
paket add nanoFramework.System.Net.Sockets.UdpClient --version 1.1.65
#r "nuget: nanoFramework.System.Net.Sockets.UdpClient, 1.1.65"
// Install nanoFramework.System.Net.Sockets.UdpClient as a Cake Addin #addin nuget:?package=nanoFramework.System.Net.Sockets.UdpClient&version=1.1.65 // Install nanoFramework.System.Net.Sockets.UdpClient as a Cake Tool #tool nuget:?package=nanoFramework.System.Net.Sockets.UdpClient&version=1.1.65
System.Net.Sockets.UdpClient
此API实现了与官方.NET类似模式的UdpClient类。除了异步方法外,与.NET API不同,接收函数不使用内部缓冲区,而是需要将缓冲区作为调用部分传递。
注意: 对于Receive
方法,如果缓冲区小于要接收的报文,报文将被截断到缓冲区大小,不予警告。的确,“lwIP”,通常是RTOS常用的TCP/IP堆栈,不支持在recvfrom
调用中返回数据报的实际长度,该长度大于传递的缓冲区,这与常见的Unix实现相反。
构建状态
组件 | 构建状态 | NuGet软件包 |
---|---|---|
nanoFramework.System.Net.Sockets.UdpClient |
使用说明
重要:显然,UdpClient需要一个具有有效IP地址的工作网络连接。请参考网络助手示例了解如何连接到网络。
UdpClient类提供了一种简单的在IP网络上发送和接收UDP数据报的方法。当前实现只支持IPv4。目前nanoFramework不支持IPv6。
示例
UdpClient示例位于nanoFramework 示例仓库中。
远程主机
由于UDP是一种无连接的协议,您在发送和接收数据之前不必建立远程主机的连接。但您可以定义一个默认的远程主机,该主机将在后续的Send
方法调用中使用。如果您建立了一个默认的远程主机,则在发送数据报时不能指定不同的主机。您可以通过以下方法之一定义一个默认的远程主机
- 使用
UdpClient(string hostname,string remoteport)
构造函数创建您的客户端。 - 创建实例然后调用
Connect
方法。
客户端使用
在客户端模式下使用UdpClient
相当简单。您可以使用构造函数之一创建一个UdpClient,是否绑定默认远程主机(见上文),然后您可以从网络发送和接收消息。
以下代码显示了典型的客户端-服务器交换,其中您首先向服务器发送一条消息并等待服务器响应
// establish defaut host and port
UdpClient udpClient = new UdpClient("1.2.3.4", 5000);
udpClient.Send(Encoding.UTF8.GetBytes("Hello server"));
// receive message
byte[] buffer = new byte[1024];
IPEndPoint ipEndpoint = new IPEndPoint(IPAddress.Any, 0);
int length = udpClient.Receive(buffer, ref ipEndpoint);
Debug.WriteLine(Encoding.UTF8.GetString(buffer, 0, length));
服务器使用
作为服务器,您将UdpClient
绑定到本地端口,然后等待客户端消息。作为服务器,您事先不知道客户端的IP地址,因此不应定义任何远程主机。
以下代码显示了一个简单的回声服务器
// Run echo protocol on port 5000
UdpClient udpClient = new UdpClient(5000);
// We limit ourself to a 1024 bytes buffer
byte[] buffer = new byte[1024];
IPEndPoint endpointClient = new IPEndPoint(IPAddress.Any, 0);
// We send back every request we get
while (true)
{
int length = udpClient.Receive(buffer, ref endpointClient);
udpClient.Send(buffer,endpointClient);
}
多播
如果您想使用多播,请确保将您的UdpClient
绑定到0.0.0.0
(通配符)地址。如果您将UdpClient绑定到特定的IPAddress
,则不会收到多播数据报。
基本上,要创建功能性的多播客户端/服务器,您需要
- 不将其绑定到特定地址创建您的UdpClient。
- 通过调用JoinMulticastGroup方法加入多播组。
- 通过调用Receive方法接收发送到该组地址的数据报。
- 通过调用Send方法发送消息到该组的多播。
- 通过调用DropMulticastGroup方法离开多播组。
以下示例展示了基本的工作流程
// Create your UdpClient without binding it to a specific address
IPEndPoint iPEndpoint = new IPEndPoint(IPAddress.Any, 5000);
UdpClient client = new UdpClient(iPEndpoint);
// Join a Multicast group
IPAddress ipGroupMulticast = IPAddress.Parse("239.255.255.250");
client.JoinMulticastGroup(ipGroupMulticast);
bool StopListener = false;
byte[] buffer = new byte[2048];
while (!StopListener)
{
IPEndPoint remote = new IPEndPoint(IPAddress.Any, 0);
int length = client.Receive(buffer, ref remote);
string result = Encoding.UTF8.GetString(buffer, 0, length);
if (result == "Ping")
{
buffer = Encoding.UTF8.GetBytes("Present");
client.Send(buffer,ipGroupMulticast);
}
StopListener = (result == "Exit");
}
// Leave the Multicast group
client.DropMulticastGroup(ipGroupMulticast);
如果您想接收自己的消息,可以通过将UdpClient.MulticastLoopback属性设置为true来实现。
反馈和文档
有关文档、提供反馈、问题以及了解如何贡献,请参阅主页仓库。
加入我们的Discord社区在此。
鸣谢
贡献者名单可在CONTRIBUTORS中找到。
许可证
nanoFramework类库采用MIT许可证。
行为准则
本项目采用的是贡献者誓言中定义的行为准则,以明确我们社区中期望的行为。有关更多信息,请参阅.NET 基金会行为准则。
.NET 基金会
本项目由.NET 基金会支持。
产品 | 版本 兼容和额外的计算目标框架版本。 |
---|---|
.NET Framework | net 是兼容的。 |
-
- nanoFramework.CoreLibrary (>= 1.15.5)
- nanoFramework.System.Net (>= 1.11.1)
NuGet 包
此包没有被任何 NuGet 包使用。
GitHub 仓库 (1)
显示依赖于 nanoFramework.System.Net.Sockets.UdpClient 的最受欢迎的前 1 个 GitHub 仓库
仓库 | 星标 |
---|---|
nanoframework/Samples
🍬 来自 nanoFramework 团队的代码示例,用于测试、概念验证和其他探索性尝试
|
版本 | 下载 | 最后更新 |
---|---|---|
1.1.65 | 63 | 7/29/2024 |
1.1.63 | 117 | 6/4/2024 |
1.1.61 | 1,977 | 1/29/2024 |
1.1.59 | 204 | 1/26/2024 |
1.1.55 | 444 | 11/10/2023 |
1.1.51 | 300 | 11/9/2023 |
1.1.48 | 1,943 | 5/16/2023 |
1.1.43 | 701 | 12/28/2022 |
1.1.41 | 577 | 12/28/2022 |
1.1.39 | 613 | 12/27/2022 |
1.1.37 | 647 | 12/23/2022 |
1.1.34 | 875 | 10/26/2022 |
1.1.32 | 695 | 10/26/2022 |
1.1.30 | 695 | 10/26/2022 |
1.1.28 | 687 | 10/25/2022 |
1.1.25 | 690 | 10/24/2022 |
1.1.23 | 713 | 10/23/2022 |
1.1.21 | 754 | 10/10/2022 |
1.1.19 | 706 | 10/8/2022 |
1.1.16 | 709 | 9/22/2022 |
1.1.14 | 696 | 9/22/2022 |
1.1.12 | 715 | 9/15/2022 |
1.1.10 | 734 | 8/5/2022 |
1.1.8 | 684 | 8/4/2022 |
1.1.6 | 698 | 8/4/2022 |
1.1.4 | 717 | 8/3/2022 |
1.1.2 | 669 | 8/3/2022 |
1.0.0.18 | 687 | 8/3/2022 |
1.0.0.16 | 784 | 6/13/2022 |
1.0.0.14 | 775 | 6/8/2022 |
1.0.0.12 | 735 | 5/26/2022 |
1.0.0.10 | 751 | 5/18/2022 |
1.0.0.8 | 721 | 5/3/2022 |
1.0.0 | 772 | 3/29/2022 |
1.0.0-preview.23 | 120 | 3/29/2022 |
1.0.0-preview.21 | 120 | 3/17/2022 |
1.0.0-preview.19 | 102 | 3/14/2022 |
1.0.0-preview.17 | 114 | 3/14/2022 |
1.0.0-preview.15 | 111 | 3/14/2022 |
1.0.0-preview.13 | 114 | 2/18/2022 |
1.0.0-preview.6 | 163 | 2/9/2022 |