public void Start(IPEndPoint _) { readThread = new Thread(() => { IPEndPoint endPoint = null; while (!dropConnection) { byte[] data = udpClient.Receive(ref endPoint); ReceiveEventArgs eventArgs = new ReceiveEventArgs(data, endPoint); IPEndPoint point = endPoint; Task.Run(() => { Receive(eventArgs); byte[] arr = new ByteBuffer().Write((int)eventArgs.ResponseCode).ToArray(); udpClient.Send(arr, arr.Length, point); }); } }); readThread.Start(); }
private static void ReceiveCallback(IAsyncResult result) { if (result == null) { return; } byte[] receivedBytes = null; EbReceiveState state = (EbReceiveState)result.AsyncState; try { receivedBytes = state.UdpClient.EndReceive(result, ref state.EndPoint); } catch (ObjectDisposedException) { } if (receivedBytes?.Length > 0) { ReceiveEventArgs eventArgs = new ReceiveEventArgs(receivedBytes, state.EndPoint); if (state.Receive != null) { Task.Factory.StartNew(() => state.Receive(eventArgs)).ContinueWith((task => { byte[] toWrite = new ByteBuffer().Write((int)eventArgs.ResponseCode).ToArray(); state.UdpClient.Send(toWrite, toWrite.Length, state.EndPoint); })); } } if (!state.Sender.Closing) { state.UdpClient.BeginReceive(state.AsyncReceiveCallback, state); } }