/// <summary> /// 数据接收回调函数 /// </summary> /// <param name="ar"></param> private void ReceiveCallback(IAsyncResult ar) { UdpState udpState = ar.AsyncState as UdpState; if (ar.IsCompleted) { try { var buffer = udpState.UdpClient.EndReceive(ar, ref udpState.IpEndPoint); udpState.Buffer = buffer; HandleDataReceived?.Invoke(this, udpState); } catch (Exception ex) { HandleException?.Invoke(ex); } finally { _serverDone.Set(); if (IsRunning && _udpServer != null) { Receive(); } } } }
/// <summary> /// 异步UdpClient UDP服务器 /// </summary> /// <param name="listenPort">监听的端口</param> public UdpServer(int serverPort, int clientPort) { this._serverEP = new IPEndPoint(IPAddress.Any, serverPort); this._clientEP = new IPEndPoint(Dns.GetHostAddresses(Dns.GetHostName())[0], clientPort); _udpServer = new UdpClient(this._serverEP); _udpClient = new UdpClient(); _udpSeverState = new UdpState() { UdpClient = _udpServer, IpEndPoint = _serverEP }; _udpClientState = new UdpState() { UdpClient = _udpClient, IpEndPoint = _clientEP }; }
private void SendCallback(IAsyncResult ar) { UdpState udpState = ar.AsyncState as UdpState; if (ar.IsCompleted) { try { udpState.UdpClient.EndSend(ar); } catch (Exception ex) { HandleException?.Invoke(ex); } finally { } } }