Use of HttpListener

2019-04-10 06:32发布

问题:

I have the following HTTP listener method, greatly inspired by MSDN's example use of the HttpListener class. I'm fairly new to programming and I'm not sure where to go from here to initialize it from my Main(). Any suggestions?

 public static void HttpListener(string[] prefixes)
    {
        if (prefixes == null || prefixes.Length == 0)
            throw new ArgumentException("Prefixes needed");

        HttpListener listener = new HttpListener();

        foreach (string s in prefixes)
        {
            listener.Prefixes.Add(s);
        }
        listener.Start();
        Console.WriteLine("Listening..");

        HttpListenerContext context = listener.GetContext();
        HttpListenerRequest request = context.Request;
        HttpListenerResponse response = context.Response;

        string responseString = "<HTML><BODY> Test </BODY></HTML>";
        byte[] buffer = Encoding.UTF8.GetBytes(responseString);

        response.ContentLength64 = buffer.Length;
        Stream output = response.OutputStream;
        output.Write(buffer, 0, buffer.Length);

        output.Close();
        listener.Stop();
    }

回答1:

You seem to have removed the comments that are mentioned on the MSDN HttpListener Class page:

// URI prefixes are required, for example "http://contoso.com:8080/index/".

So just call it like that:

public static void Main(string[] args)
{
    HttpListener(new[] { "http://localhost/" });
}

But please note this example will handle only one request and then exit. If your follow-up question is then "How can I make it handle multiple requests?", see Handling multiple requests with C# HttpListener.



回答2:

you can do something like this :

   public void ListenTraces()
    {
        httpListener.Prefixes.Add(PORT_HOST);
        try
        {
            httpListener.Start();
        }
        catch (HttpListenerException hlex)
        {
            log.Warn("Can't start the agent to listen transaction" + hlex);
            return;
        }
        log.Info("Now ready to receive traces...");
        while (true)
        {
            var context = httpListener.GetContext(); // get te context 

            log.Info("New trace connexion incoming");
           Console.WriteLine(context.SomethingYouWant);
        }
    }


标签: c# http