private void Listen(object state)
        {
            HttpListenerCallbackState callbackState = (HttpListenerCallbackState)state;

            while (callbackState.Listener.IsListening)
            {
                callbackState.Listener.BeginGetContext(new AsyncCallback(ListenerCallback), callbackState);
                int n = WaitHandle.WaitAny(new WaitHandle[] { callbackState.ListenForNextRequest, stopEvent });

                if (n == 1)
                {
                    // stopEvent was signalled
                    callbackState.Listener.Stop();
                    break;
                }
            }
        }
        public void ListenAsynchronously(IEnumerable <string> prefixes)
        {
            try
            {
                using (HttpListener listener = new HttpListener())
                {
                    foreach (string s in prefixes)
                    {
                        listener.Prefixes.Add(s);
                    }

                    listener.Start();
                    HttpListenerCallbackState state = new HttpListenerCallbackState(listener);
                    ThreadPool.QueueUserWorkItem(Listen, state);
                }
            }
            catch
            { }
        }
        private void ListenerCallback(IAsyncResult ar)
        {
            HttpListenerCallbackState callbackState = (HttpListenerCallbackState)ar.AsyncState;
            HttpListenerContext       context       = null;

            int requestNumber = Interlocked.Increment(ref requestCounter);

            try
            {
                context = callbackState.Listener.EndGetContext(ar);
            }
            catch (Exception ex)
            {
                return;
            }
            finally
            {
                callbackState.ListenForNextRequest.Set();
            }

            if (context == null)
            {
                return;
            }


            HttpListenerRequest request = context.Request;

            Console.WriteLine("\r\nServer Request");
            string responseMicrocontroller = "";

            if (request.HasEntityBody)
            {
                System.IO.Stream       body     = request.InputStream;
                System.Text.Encoding   encoding = request.ContentEncoding;
                System.IO.StreamReader reader   = new System.IO.StreamReader(body, encoding);
                if (request.ContentType != null)
                {
                    Console.WriteLine("Client data content type {0}", request.ContentType);
                }

                string s = reader.ReadToEnd();

                responseMicrocontroller = EnviarComandoPanda(s);

                body.Close();
                reader.Close();
            }

            if (string.IsNullOrEmpty(responseMicrocontroller))
            {
                responseMicrocontroller = "NO";
            }

            try
            {
                using (HttpListenerResponse response = context.Response)
                {
                    //response stuff happens here
                    Console.WriteLine("Send data from web: " + responseMicrocontroller);
                    byte[] buffer = Encoding.UTF8.GetBytes(responseMicrocontroller);
                    response.ContentLength64 = buffer.LongLength;
                    response.OutputStream.Write(buffer, 0, buffer.Length);
                    context.Response.OutputStream.Close();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            try
            {
                context.Response.Close();
            }
            catch { }
        }