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                
This command should be used in the Visual Studio Package Manager Console, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="nanoFramework.System.Net.Sockets.UdpClient" Version="1.1.65" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add nanoFramework.System.Net.Sockets.UdpClient --version 1.1.65                
#r "nuget: nanoFramework.System.Net.Sockets.UdpClient, 1.1.65"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// 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                

Quality Gate Status Reliability Rating License NuGet #yourfirstpr Discord

nanoFramework logo


System.Net.Sockets.UdpClient

此API实现了与官方.NET类似模式的UdpClient类。除了异步方法外,与.NET API不同,接收函数不使用内部缓冲区,而是需要将缓冲区作为调用部分传递。

注意: 对于Receive方法,如果缓冲区小于要接收的报文,报文将被截断到缓冲区大小,不予警告。的确,“lwIP”,通常是RTOS常用的TCP/IP堆栈,不支持在recvfrom调用中返回数据报的实际长度,该长度大于传递的缓冲区,这与常见的Unix实现相反。

构建状态

组件 构建状态 NuGet软件包
nanoFramework.System.Net.Sockets.UdpClient Build Status NuGet

使用说明

重要:显然,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 是兼容的。
兼容的目标框架
包含的目标框架(在包中)
了解更多关于 目标框架.NET Standard 的信息。

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