Skip to content

Class UdpServerAsync

Namespace: Tool.Sockets.UdpHelper
Assembly: Tool.Net.dll

封装一个底层异步Udp对象(服务端)IpV4

csharp
public class UdpServerAsync : NetworkListener<IUdpCore>, INetworkListener<IUdpCore>, INetworkListener, INetworkCore, IDisposable

Inheritance

objectEnServerEventDriveNetworkListener<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()

创建一个 服务器类

csharp
public UdpServerAsync()

UdpServerAsync(NetBufferSize)

创建一个 服务器类,并确定是否开启框架验证模式保证数据唯一性。

csharp
public UdpServerAsync(NetBufferSize size)

Parameters

size NetBufferSize

数据缓冲区大小

UdpServerAsync(NetBufferSize, bool)

创建一个 服务器类,确认模式和设置流大小

csharp
public UdpServerAsync(NetBufferSize size, bool OnlyData)

Parameters

size NetBufferSize

数据缓冲区大小

OnlyData bool

是否启动框架模式

Properties

IsClose

标识服务端连接是否关闭

csharp
public override bool IsClose { get; }

Property Value

bool

ListClient

已建立连接的集合 key:UserKey value:UdpEndPoint

csharp
public override IReadOnlyDictionary<UserKey, IUdpCore> ListClient { get; }

Property Value

IReadOnlyDictionary<UserKey, IUdpCore>

Millisecond

监听控制毫秒

csharp
public override int Millisecond { get; set; }

Property Value

int

OnlyData

是否保证数据唯一性,开启后将采用框架验证保证其每次的数据唯一性,(如果不满足数据条件将直接与其断开连接)

csharp
public bool OnlyData { get; }

Property Value

bool

ReceiveTimeout

监听每个连接用户的最大等待时长(默认60秒一直等待)

不得小于5秒

csharp
public int ReceiveTimeout { get; init; }

Property Value

int

ReplyDelay

回复消息延迟时间(警告:当前设置仅在开启了OnlyData模式生效,超时未回复会重发,重发最大次数10,依然没有回复将抛出异常!)小于20将不生效使用默认值

csharp
public int ReplyDelay { get; init; }

Property Value

int

Server

服务器创建时的信息

csharp
public override UserKey Server { get; }

Property Value

UserKey

Methods

CreateSendBytes(Ipv4Port, int)

创建数据包对象

csharp
public SendBytes<IUdpCore> CreateSendBytes(Ipv4Port key, int length)

Parameters

key Ipv4Port

通信IP:Port

length int

数据包大小

Returns

SendBytes<IUdpCore>

Exceptions

Exception

CreateSendBytes(IUdpCore, int)

创建数据包对象

csharp
public override SendBytes<IUdpCore> CreateSendBytes(IUdpCore client, int length = 0)

Parameters

client IUdpCore

通信对象

length int

数据包大小

Returns

SendBytes<IUdpCore>

Dispose()

关闭连接,回收相关资源

csharp
public override void Dispose()

OnComplete(in UserKey, EnServer)

可供开发重写的实现类

csharp
public override ValueTask<IGetQueOnEnum> OnComplete(in UserKey key, EnServer enAction)

Parameters

key UserKey

指定发送对象

enAction EnServer

消息类型

Returns

ValueTask<IGetQueOnEnum>

SendAsync(Ipv4Port, string)

开始异步发送数据

csharp
public ValueTask SendAsync(Ipv4Port key, string msg)

Parameters

key Ipv4Port

客户端的ip地址和端口号

msg string

要发送的内容

Returns

ValueTask

SendAsync(Ipv4Port, ArraySegment<byte>)

开始异步发送数据

csharp
public ValueTask SendAsync(Ipv4Port key, ArraySegment<byte> listData)

Parameters

key Ipv4Port

客户端的ip地址和端口号

listData ArraySegment<byte>

要发送的内容,允许多个包

Returns

ValueTask

SendAsync(IUdpCore, string)

开始异步发送数据

csharp
public ValueTask SendAsync(IUdpCore client, string msg)

Parameters

client IUdpCore

UdpEndPoint对象

msg string

要发送的内容

Returns

ValueTask

SendAsync(IUdpCore, ArraySegment<byte>)

开始异步发送数据

csharp
public ValueTask SendAsync(IUdpCore client, ArraySegment<byte> listData)

Parameters

client IUdpCore

UdpEndPoint对象

listData ArraySegment<byte>

要发送的内容,允许多个包

Returns

ValueTask

SendAsync(SendBytes<IUdpCore>)

开始异步发送数据

csharp
public override ValueTask SendAsync(SendBytes<IUdpCore> sendBytes)

Parameters

sendBytes SendBytes<IUdpCore>

数据包对象

Returns

ValueTask

SetCompleted(CompletedEvent<EnServer>)

连接、发送、关闭事件

csharp
public override void SetCompleted(CompletedEvent<EnServer> Completed)

Parameters

Completed CompletedEvent<EnServer>

SetReceived(ReceiveEvent<IUdpCore>)

接收到数据事件

csharp
public override void SetReceived(ReceiveEvent<IUdpCore> Received)

Parameters

Received ReceiveEvent<IUdpCore>

StartAsync(int)

开始异步监听本机127.0.0.1的端口号

csharp
public Task StartAsync(int port)

Parameters

port int

Returns

Task

StartAsync(string, int)

开始异步监听ip地址的端口

csharp
public override Task StartAsync(string ip, int port)

Parameters

ip string

port int

Returns

Task

Stop()

UDP关闭

csharp
public override void Stop()

TrySocket(in UserKey, out IUdpCore)

根据IP:Port获取对应的连接对象

csharp
public override bool TrySocket(in UserKey key, out IUdpCore client)

Parameters

key UserKey

IP:Port

client IUdpCore

连接对象

Returns

bool

返回成功状态

基于Apache-2.0协议开源