UDP 传输 - Snet Docs

🔌 UDP 传输

命名空间: Snet.Core.communication.net.udp.unicast.client / Snet.Core.communication.net.udp.unicast.service / Snet.Core.communication.net.udp.multicast / Snet.Core.communication.net.udp.broadcast | 类: UdpClientOperate, UdpServiceOperate, UdpMulticastOperate, UdpBroadcastOperate

UdpClientOperate — UDP 单播客户端

继承: CommunicationAbstract<UdpClientOperate, UdpClientData.Basics>

配置 类型 默认值 说明
IpAddress string "127.0.0.1" 远程 IP
Port int 6688 远程端口
LocalPort int 0 本地绑定端口 (0=自动)
InterruptReconnection bool true 自动重连
ReconnectionInterval int 1000 重连间隔 (ms)
Timeout int 1000 I/O 超时 (ms)
SendWaitInterval int 5000 发送等待超时 (ms)
MaxChunkSize int 261120 单数据报最大字节数
RetrySendCount int 5 发送重试次数

UDP 数据报不分包:载荷必须 ≤ Math.Min(MaxChunkSize, 60 * 1024) 字节(UDP 安全载荷上限),否则发送失败。使用 UdpClient.Connect() 建立关联单播套接字;重连采用相同指数退避(500ms × 2ⁿ ms,n 为重试次数,上限 30s)。

using Snet.Core.communication.net.udp.unicast.client;
var udp = await UdpClientOperate.InstanceAsync(new Basics { IpAddress = "192.168.1.100", Port = 6688 });
await udp.OnAsync();
await udp.SendAsync(data);
await udp.OffAsync();

UdpServiceOperate — UDP 单播服务端

继承: CommunicationServiceAbstract<UdpServiceOperate, UdpServiceData.Basics>

单一 ReceiveLoopAsync 自动发现客户端端点。已知客户端由 ConcurrentDictionary<string, UdpClientSession> 管理,键为 "IP:端口"UdpClientSession 封装 IPEndPoint 端点与最后活跃时间。独立清理循环移除空闲超过 ClientTimeout(默认 60000 ms,检查间隔 = max(ClientTimeout / 3, 5000) ms)的客户端并触发断开事件。发送为单数据报(载荷 ≤ Math.Min(MaxChunkSize, 60 * 1024) 字节,且发送字节数须等于载荷长度)。

using Snet.Core.communication.net.udp.unicast.service;
var server = await UdpServiceOperate.InstanceAsync(new Basics { Port = 6688 });
await server.OnAsync();
await server.SendAsync(data);                          // 群发
await server.SendAsync(data, "192.168.1.10:5000");     // 单播
await server.OffAsync();

UdpMulticastOperate — UDP 组播

继承: CommunicationAbstract<UdpMulticastOperate, UdpMulticastData.Basics>

配置 类型 默认值 说明
Port int 6688 本地绑定端口
MulticastAddress string "239.0.0.1" 组播组地址
MulticastPort int 8866 目标端口 (0=使用Port)
TimeToLive short 1 TTL (0=本机,1=子网)
Timeout int 1000 I/O 超时 (ms)
SendWaitInterval int 5000 发送等待超时 (ms)
MaxChunkSize int 261120 单数据报最大字节数
RetrySendCount int 5 发送重试次数

JoinMulticastGroup/DropMulticastGroupReuseAddress,全接口绑定 IPAddress.Any。数据报不分包:载荷必须 ≤ Math.Min(MaxChunkSize, 60 * 1024) 字节,否则发送失败。

using Snet.Core.communication.net.udp.multicast;
var mc = await UdpMulticastOperate.InstanceAsync(new Basics {
    Port = 6688, MulticastAddress = "239.0.0.1", TimeToLive = 1
});
await mc.OnAsync();
await mc.SendAsync(data);
await mc.OffAsync();

UdpBroadcastOperate — UDP 广播

继承: CommunicationAbstract<UdpBroadcastOperate, UdpBroadcastData.Basics>

配置 类型 默认值 说明
Port int 6688 本地绑定端口
BroadcastAddress string "255.255.255.255" 广播地址
BroadcastPort int 8866 目标端口 (0=使用Port)
Timeout int 1000 I/O 超时 (ms)
SendWaitInterval int 5000 发送等待超时 (ms)
MaxChunkSize int 261120 单数据报最大字节数
RetrySendCount int 5 发送重试次数

EnableBroadcast = trueReuseAddressIPAddress.Any 绑定。数据报不分包:载荷必须 ≤ Math.Min(MaxChunkSize, 60 * 1024) 字节,否则发送失败。

using Snet.Core.communication.net.udp.broadcast;
var bc = await UdpBroadcastOperate.InstanceAsync(new Basics {
    Port = 6688, BroadcastAddress = "255.255.255.255"
});
await bc.OnAsync();
await bc.SendAsync(data);
await bc.OffAsync();

参见