Class UdpServerAsync
Namespace: Tool.Sockets.UdpHelper
Assembly: Tool.Net.dll
封装一个底层异步Udp对象(服务端)IpV4
public class UdpServerAsync : NetworkListener<IUdpCore>, INetworkListener<IUdpCore>, INetworkListener, INetworkCore, IDisposableInheritance
object ← EnServerEventDrive ← NetworkListener<IUdpCore> ← UdpServerAsync
Implements
INetworkListener<IUdpCore>, INetworkListener, INetworkCore, IDisposable
Inherited Members
NetworkListener<IUdpCore>.ListClient, NetworkListener<IUdpCore>.Server, NetworkListener<IUdpCore>.Millisecond, NetworkListener<IUdpCore>.IsClose, NetworkListener<IUdpCore>.IsThreadPool, NetworkListener<IUdpCore>.BufferSize, NetworkListener<IUdpCore>.CreateSendBytes(IUdpCore, int), NetworkListener<IUdpCore>.Dispose(), NetworkListener<IUdpCore>.OnComplete(in UserKey, EnServer), NetworkListener<IUdpCore>.SendAsync(SendBytes<IUdpCore>), NetworkListener<IUdpCore>.SetCompleted(CompletedEvent<EnServer>), NetworkListener<IUdpCore>.SetReceived(ReceiveEvent<IUdpCore>), NetworkListener<IUdpCore>.StartAsync(string, int), NetworkListener<IUdpCore>.Stop(), NetworkListener<IUdpCore>.TrySocket(in UserKey, out IUdpCore), EnServerEventDrive.OnInterceptor(EnServer, bool), EnServerEventDrive.OnIsQueue(EnServer, bool), EnServerEventDrive.IsEvent(EnServer), EnServerEventDrive.IsQueue(EnServer), EnServerEventDrive.OpenAllEvent(), EnServerEventDrive.OpenAllQueue(), EnServerEventDrive.CloseAllEvent(), EnServerEventDrive.CloseAllQueue(), object.Equals(object?), object.Equals(object?, object?), object.GetHashCode(), object.GetType(), object.MemberwiseClone(), object.ReferenceEquals(object?, object?), object.ToString()
Extension Methods
ObjectExtension.Add<T>(object, object, object), ObjectExtension.CopyEntity(object, object, params string[]), ObjectExtension.EntityToJson(object), ObjectExtension.EntityToJson(object, bool), ObjectExtension.EntityToJson(object, bool, string), DictionaryExtension.GetDictionary(object), TypeExtension.GetFieldKey(object, string, out bool), TypeExtension.GetFieldKey<T>(object, string, out bool), TypeExtension.GetFieldKey(object, Type, string, out bool), ObjectExtension.GetIntPtr(object), ObjectExtension.GetIntPtrInt(object), TypeExtension.GetPropertieFind(object, string, bool), TypeExtension.GetProperties(object), TypeExtension.GetPropertyKey(object, string, out bool), TypeExtension.GetPropertyKey<T>(object, string, out bool), TypeExtension.GetPropertyKey(object, Type, string, out bool), TypeExtension.GetValue(object, PropertyDescriptor), TypeExtension.GetValue(object, string, bool), TypeExtension.GetValue(object, string), ObjectExtension.Read<T>(object, object, int, int), ObjectExtension.Read<T>(object, int, object, int, int), DictionaryExtension.SetDictionary(object, IDictionary<string, object>), TypeExtension.SetFieldKey(object, string, object), TypeExtension.SetFieldKey<T>(object, string, object), TypeExtension.SetFieldKey(object, Type, string, object), TypeExtension.SetPropertyKey(object, string, object), TypeExtension.SetPropertyKey<T>(object, string, object), TypeExtension.SetPropertyKey(object, Type, string, object), TypeExtension.SetValue(object, PropertyDescriptor, object), TypeExtension.SetValue(object, string, object, bool), TypeExtension.SetValue(object, string, object), ObjectExtension.ToBase64String(object), ObjectExtension.ToBytes(object), ObjectExtension.ToBytes(object, out Type), DictionaryExtension.ToDictionary(object), DictionaryExtension.ToDictionary<T>(object), DictionaryExtension.ToIDictionary(object), DictionaryExtension.ToIDictionary<T>(object), ObjectExtension.ToJson(object), ObjectExtension.ToJson(object, JsonSerializerOptions), ObjectExtension.ToJsonWeb(object), ObjectExtension.ToJsonWeb(object, Action<JsonSerializerOptions>), ObjectExtension.ToTryVar<T>(object, T), ObjectExtension.ToVar<T>(object), ObjectExtension.ToVar(object, Type, bool), ObjectExtension.ToVar(object, string), ObjectExtension.ToXml(object)
Remarks
代码由逆血提供支持
Constructors
UdpServerAsync()
创建一个 服务器类
public UdpServerAsync()UdpServerAsync(NetBufferSize)
创建一个 服务器类,并确定是否开启框架验证模式保证数据唯一性。
public UdpServerAsync(NetBufferSize size)Parameters
size NetBufferSize
数据缓冲区大小
UdpServerAsync(NetBufferSize, bool)
创建一个 服务器类,确认模式和设置流大小
public UdpServerAsync(NetBufferSize size, bool OnlyData)Parameters
size NetBufferSize
数据缓冲区大小
OnlyData bool
是否启动框架模式
Properties
IsClose
标识服务端连接是否关闭
public override bool IsClose { get; }Property Value
ListClient
已建立连接的集合 key:UserKey value:UdpEndPoint
public override IReadOnlyDictionary<UserKey, IUdpCore> ListClient { get; }Property Value
IReadOnlyDictionary<UserKey, IUdpCore>
Millisecond
监听控制毫秒
public override int Millisecond { get; set; }Property Value
OnlyData
是否保证数据唯一性,开启后将采用框架验证保证其每次的数据唯一性,(如果不满足数据条件将直接与其断开连接)
public bool OnlyData { get; }Property Value
ReceiveTimeout
监听每个连接用户的最大等待时长(默认60秒一直等待)
不得小于5秒
public int ReceiveTimeout { get; init; }Property Value
ReplyDelay
回复消息延迟时间(警告:当前设置仅在开启了OnlyData模式生效,超时未回复会重发,重发最大次数10,依然没有回复将抛出异常!)小于20将不生效使用默认值
public int ReplyDelay { get; init; }Property Value
Server
服务器创建时的信息
public override UserKey Server { get; }Property Value
Methods
CreateSendBytes(Ipv4Port, int)
创建数据包对象
public SendBytes<IUdpCore> CreateSendBytes(Ipv4Port key, int length)Parameters
key Ipv4Port
通信IP:Port
length int
数据包大小
Returns
Exceptions
CreateSendBytes(IUdpCore, int)
创建数据包对象
public override SendBytes<IUdpCore> CreateSendBytes(IUdpCore client, int length = 0)Parameters
client IUdpCore
通信对象
length int
数据包大小
Returns
Dispose()
关闭连接,回收相关资源
public override void Dispose()OnComplete(in UserKey, EnServer)
可供开发重写的实现类
public override ValueTask<IGetQueOnEnum> OnComplete(in UserKey key, EnServer enAction)Parameters
key UserKey
指定发送对象
enAction EnServer
消息类型
Returns
SendAsync(Ipv4Port, string)
开始异步发送数据
public ValueTask SendAsync(Ipv4Port key, string msg)Parameters
key Ipv4Port
客户端的ip地址和端口号
msg string
要发送的内容
Returns
SendAsync(Ipv4Port, ArraySegment<byte>)
开始异步发送数据
public ValueTask SendAsync(Ipv4Port key, ArraySegment<byte> listData)Parameters
key Ipv4Port
客户端的ip地址和端口号
listData ArraySegment<byte>
要发送的内容,允许多个包
Returns
SendAsync(IUdpCore, string)
开始异步发送数据
public ValueTask SendAsync(IUdpCore client, string msg)Parameters
client IUdpCore
UdpEndPoint对象
msg string
要发送的内容
Returns
SendAsync(IUdpCore, ArraySegment<byte>)
开始异步发送数据
public ValueTask SendAsync(IUdpCore client, ArraySegment<byte> listData)Parameters
client IUdpCore
UdpEndPoint对象
listData ArraySegment<byte>
要发送的内容,允许多个包
Returns
SendAsync(SendBytes<IUdpCore>)
开始异步发送数据
public override ValueTask SendAsync(SendBytes<IUdpCore> sendBytes)Parameters
数据包对象
Returns
SetCompleted(CompletedEvent<EnServer>)
连接、发送、关闭事件
public override void SetCompleted(CompletedEvent<EnServer> Completed)Parameters
Completed CompletedEvent<EnServer>
SetReceived(ReceiveEvent<IUdpCore>)
接收到数据事件
public override void SetReceived(ReceiveEvent<IUdpCore> Received)Parameters
Received ReceiveEvent<IUdpCore>
StartAsync(int)
开始异步监听本机127.0.0.1的端口号
public Task StartAsync(int port)Parameters
port int
Returns
StartAsync(string, int)
开始异步监听ip地址的端口
public override Task StartAsync(string ip, int port)Parameters
ip string
port int
Returns
Stop()
UDP关闭
public override void Stop()TrySocket(in UserKey, out IUdpCore)
根据IP:Port获取对应的连接对象
public override bool TrySocket(in UserKey key, out IUdpCore client)Parameters
key UserKey
IP:Port
client IUdpCore
连接对象
Returns
返回成功状态