Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 17368|Resposta: 0

[Fonte] Servidor web baseado em HttpListener

[Copiar link]
Publicado em 21/12/2015 11:00:26 | | |

Para simplificar ainda mais os ouvintes do protocolo HTTP, . O .NET fornece a classe HttpListener no namespace System.Net. Acompanhando este objeto, . O .NET fornece uma série de objetos relacionados que encapsulam o processamento HTTP. Note que essa classe utiliza Http.sys componentes do sistema para realizar o trabalho, então só pode ser usada em sistemas operacionais Windows XPSP2 ou Server 2003 ou posteriores.

A classe HttpListener simplifica ainda mais a operação de escuta, e só precisa fornecer o endereço de escuta, número da porta e caminho virtual através do método string para iniciar o trabalho de escuta.

Após iniciar a escuta, o método GetContext bloqueia a thread; quando a solicitação do cliente chegar, o HttpListener retorna um objeto HttpListenerContext como proxy geral para processar requisições do cliente, através da propriedade Request do objeto proxy, podemos obter um objeto do tipo HttpListenerRequest representando os parâmetros da solicitação, esse objeto objetifica a maioria dos parâmetros da solicitação, então , podemos obter os parâmetros de requisição por meio de uma série de propriedades que ele fornece. Por exemplo, a propriedade HttpMethod do HttpListenerRequest fornece o tipo de método solicitado. Por meio do atributo Response do proxy, podemos obter um objeto de processamento de resposta do tipo HttpListenerResponse, que encapsula os dados e operações da resposta, o que simplifica muito a carga de trabalho de programação da resposta, e o processo de trabalho é o seguinte:
//检查系统是否支持
se (! httpListener.IsSupported)
{
    lançar um novo System.InvalidOperationException(
        "Para usar o HttpListener, você deve estar no Windows XP SP2 ou Server 2003 ou posterior!" );
}
Note que o prefixo deve terminar com uma barra / para frente
prefixos string[] = nova string[] { "http://localhost:49152/" };
Crie um ouvinte.
HttpListener ouvinte = novo HttpListener();
Adicione o prefixo do monitor.
foreach (cadeia s em prefixos)
{
    ouvinte. Prefixos. Adicionar(es);
}
Comece a ouvir
ouvinte. Start();
Console.WriteLine(" ouvindo...");
enquanto (verdadeiro)
{
    Nota: O método GetContext bloqueará a thread até que a solicitação chegue
    HttpListenerContext = ouvinte. GetContext();
    Obtenha o objeto de solicitação
    HttpListenerRequest request = contexto. Pedido;
    Console.WriteLine("{0} {1} HTTP/1.1", solicitação. HttpMethod, solicitação. RawUrl);
    Console.WriteLine("Aceitar: {0}", string. Join(",", pedido. AceitarTipos));
    Console.WriteLine("Aceitar-Linguagem: {0}",
        fio. Join(",", pedido. UserLanguages));
    Console.WriteLine("User-Agent: {0}", solicitação. UserAgent);
    Console.WriteLine ("Aceitar-Codificar: {0}", solicitação. cabeçalhos["Aceitar-Codificação"]);
    Console.WriteLine("Conexão: {0}",
        Pedido. Keep Alive e ? "Manter Vivo" : "perto");
    Console.WriteLine ("Host: {0}", solicitação. NomeDeUsuárioHost);
    Console.WriteLine("Pragma: {0}", solicitação. cabeçalhos["Pragma"]);
    Pegar o alvo de resposta
    HttpListenerResponse resposta = contexto. Resposta;
    Construa o conteúdo da resposta
    resposta de cadeias String
        = @"<html>
                <head><title>Do Servidor HttpListener</title></head>
                <body><h1>Olá, mundo.</h1></body>
            ";</html>
    Defina o conteúdo do cabeçalho de resposta, comprimento, codificação
    resposta. ConteúdoComprimento64
        = System.Text.Encoding.UTF8.GetByteCount(responseString);
    resposta. ContentType = "texto/html; charset=UTF-8";
    Respostas de saída
    System.IO.Stream saída = resposta. OutputStream;
    Escritor System.IO.StreamWriter = novo System.IO.StreamWriter(saída);
    escritor. Write(responseString);
    O fluxo de saída deve ser desligado
    escritor. Fechar();
    if (Console.KeyAvailable)
        intervalo;
}
Desligue o servidor
ouvinte. Stop();

Ao usar o HttpListener, os parâmetros de solicitação e resposta comuns se tornam propriedades de objetos, o que reduz muito a carga de trabalho de programação. No entanto, a maioria dos parâmetros ainda precisa ser acessada pelo indexador Headers, assim como o parâmetro de solicitação Accept-Encoding no exemplo acima, que não podemos acessar diretamente pelas propriedades.




Anterior:Arquivos CSS e arquivos js são seguidos por um ponto de interrogação
Próximo:O dia começou!! Vamos, pessoal
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com