private void ReceiveCallback(IAsyncResult ar) { UdpState us = (UdpState)(ar.AsyncState); _logger.LogDebug("Start receive data. AuthId: {0} Server port {1}", _options.AuthId, _options.Port); string receiveString; try { byte[] receiveBytes = us.client.EndReceive(ar, ref us.remoteEp); _logger.LogDebug("Received data. AuthId: {0} Server port {1} Host ip: {2} Host port {3}", _options.AuthId, _options.Port, us.remoteEp.Address.ToString(), us.remoteEp.Port); receiveString = Encoding.ASCII.GetString(receiveBytes); } catch (Exception e) { _logger.LogWarning("Data receive error. AuthId: {0} Server port {1} Sender host: {2} Sender port: {3} Error message: {4}", _options.AuthId, _options.Port, us.remoteEp.Address.ToString(), us.remoteEp.Port, e.Message); messageReceived = true; return; } _logger.LogDebug("End receive data. AuthId: {0} Server port {1} Sender host: {2} Sender port: {3} Data: {4}", _options.AuthId, _options.Port, us.remoteEp.Address.ToString(), us.remoteEp.Port, receiveString); ExtractData(receiveString, us.remoteEp.Address.ToString(), us.remoteEp.Port); messageReceived = true; }
private void ReceiveMessages(CancellationToken cancellationToken) { // Receive a message IPEndPoint LocalEp = new IPEndPoint(IPAddress.Any, _options.Port); IPEndPoint RemoteEp = new IPEndPoint(IPAddress.Any, 0); UdpClient udpClient = new UdpClient(LocalEp); UdpState s = new UdpState { localEp = LocalEp, remoteEp = RemoteEp, client = udpClient }; while (true) { s.client.BeginReceive(new AsyncCallback(ReceiveCallback), s); // Do some work while we wait for a message. For this example, we'll just sleep while (!messageReceived && !cancellationToken.IsCancellationRequested) { Thread.Sleep(100); } messageReceived = false; if (cancellationToken.IsCancellationRequested) { _logger.LogDebug("Server cancellation request. AuthId: {0} Listening port: {1}", _options.AuthId, _options.Port); break; } } }