private void RaiseDataReceived(AsyncUDPState state, byte[] buffer) { DataReceived?.Invoke(this, ServerType == UDPServerType.ASCII ? new xxUDPEventArgs(new xxStrBody(buffer), state) : new xxUDPEventArgs(new xxUDPBody(buffer), state)); }
/// <summary> /// 异步UdpClient UDP服务器 /// </summary> /// <param name="localIPAddress">监听的IP地址</param> /// <param name="listenPort">监听的端口</param> /// <param name="maxClient">最大客户端数量</param> public xxUDPAsyncServer(IPAddress localIPAddress, int listenPort, int maxClient) { this.Address = localIPAddress; this.Port = listenPort; this.Encoding = Encoding.Default; MaxClient = maxClient; //_clients = new List<AsyncUDPSocketState>(); _server = new UdpClient(new IPEndPoint(this.Address, this.Port)); _server.Client.ReceiveBufferSize = ReceiveBufferSize; _recvBuffer = new byte[_server.Client.ReceiveBufferSize]; udpReceiveState = new AsyncUDPState(); udpReceiveState.udpClient = _server; }
private void SendCallback(IAsyncResult ar) { AsyncUDPState state = ar.AsyncState as AsyncUDPState; if (ar.IsCompleted) { try { _server.EndSend(ar); //消息发送完毕事件 RaiseCompletedSend(state); } catch (Exception) { RaiseOtherException(state); } } }
/// <summary> /// 接收数据的方法 /// </summary> /// <param name="ar"></param> private void ReceiveDataAsync(IAsyncResult ar) { AsyncUDPState udpState = ar.AsyncState as AsyncUDPState; IPEndPoint remote = null; byte[] buffer = null; try { buffer = _server.EndReceive(ar, ref remote); if (ServerType == UDPServerType.ASCII) { string receiveString = Encoding.ASCII.GetString(buffer); LOG.InfoFormat("({4}) Received {0}:{1},len:{2},body:{3}", remote.Address, remote.Port, buffer.Length, receiveString, Name); } else { LOG.InfoFormat("({3}) Received {0}:{1},len:{2}", remote.Address, remote.Port, buffer.Length, Name); } if (PrintHex) { PrintUtils.PrintHex(buffer); } udpState.remote = remote; //触发数据收到事件 RaiseDataReceived(udpState, buffer); } catch (Exception exception) { RaiseNetError(udpState, exception); } finally { if (IsRunning && _server != null) { _server.BeginReceive(ReceiveDataAsync, udpState); } } }
public xxUDPEventArgs(Exception exception, AsyncUDPState state) { Exception = exception; State = state; }
public xxUDPEventArgs(xxUDPBody msg, AsyncUDPState state) { this.UdpBody = msg; this.State = state; IsHandled = false; }
public xxUDPEventArgs(AsyncUDPState state) { this.State = state; IsHandled = false; }
private void RaiseOtherException(AsyncUDPState state) { RaiseOtherException(state, null); }
/// <summary> /// 触发异常事件 /// </summary> /// <param name="state"></param> private void RaiseOtherException(AsyncUDPState state, Exception exception) { OtherException?.Invoke(this, new xxUDPEventArgs(exception, state)); }
/// <summary> /// 触发网络错误事件 /// </summary> /// <param name="state"></param> private void RaiseNetError(AsyncUDPState state, Exception exception) { NetError?.Invoke(this, new xxUDPEventArgs(exception, state)); }
/// <summary> /// 触发数据发送完毕的事件 /// </summary> /// <param name="state"></param> private void RaiseCompletedSend(AsyncUDPState state) { CompletedSend?.Invoke(this, new xxUDPEventArgs(state)); }
/// <summary> /// 触发发送数据前的事件 /// </summary> /// <param name="state"></param> private void RaisePrepareSend(AsyncUDPState state) { PrepareSend?.Invoke(this, new xxUDPEventArgs(state)); }