Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 17368|Odpowiedź: 0

[Źródło] Serwer WWW oparty na HttpListener

[Skopiuj link]
Opublikowano 21.12.2015 11:00:26 | | |

Aby jeszcze bardziej uprościć słuchaczy protokołu HTTP, . .NET udostępnia klasę HttpListener w przestrzeni nazw System.Net. Towarzyszący temu obiektowi jest . .NET oferuje szereg powiązanych obiektów, które enkapsulują pracę przetwarzania HTTP. Należy zauważyć, że ta klasa wykorzystuje Http.sys komponenty systemowe do wykonania zadania, więc może być używana tylko na systemach Windows XPSP2 lub Server 2003 lub nowszych.

Klasa HttpListener dodatkowo upraszcza operację nasłuchu i musi jedynie podać adres nasłuchu, numer portu oraz wirtualną ścieżkę przez metodę stringową, aby rozpocząć pracę odsłuchu.

Po rozpoczęciu odsłuchu metoda GetContext zablokuje wątek, a gdy przyjdzie żądanie klienta, HttpListener zwraca obiekt HttpListenerContext jako ogólny proxy do przetwarzania żądań klienta, poprzez właściwość Request obiektu proxy możemy uzyskać obiekt typu HttpListenerRequest reprezentujący parametry żądania, ten obiekt uprzedmiotowuje większość parametrów żądania, więc , możemy uzyskać parametry żądania za pomocą serii właściwości, które ona zapewnia. Na przykład właściwość HttpMethod w HttpListenerRequest podaje żądany typ metody. Dzięki atrybutowi Response proxy'a możemy uzyskać obiekt przetwarzania odpowiedzi typu HttpListenerResponse, który zawiera dane i operacje odpowiedzi, co znacznie upraszcza obciążenie programistyczne odpowiedzi, a proces pracy wygląda następująco:
//检查系统是否支持
jeśli (! HttpListener.IsSupported)
{
    throw new System.InvalidOperationException(
        "Aby korzystać z HttpListener, musisz mieć Windows XP SP2 lub Server 2003 lub nowszy!" );
}
Należy zauważyć, że przedrostek musi kończyć się ukośnikiem / do przodu
prefiksy string[] = nowy string[] { "http://localhost:49152/" };
Stwórz słuchacza.
Słuchacz HttpListener = nowy HttpListener();
Dodaj prefiks monitora.
foreach (ciąg S w przedrostkach)
{
    słuchacz. Prefiksy.add(s);
}
Zacznij słuchać
słuchacz. Start();
Console.WriteLine(""słuchanie...");
podczas gdy (prawdziwe)
{
    Uwaga: Metoda GetContext zablokuje wątek do czasu nadejścia żądania
    HttpListenerContext context = listener. GetContext();
    Pobierz obiekt żądania
    HttpListenerRequest request = kontekst. Prośba;
    Console.WriteLine("{0} {1} HTTP/1.1", żądanie. HttpMethod, prośba. RawUrl);
    Console.WriteLine("Zaakceptuj: {0}", string. Dołącz (",", prośba. AcceptTypes));
    Console.WriteLine("Accept-Language: {0}",
        Nity. Dołącz (",", prośba. UserLanguages));
    Console.WriteLine("User-Agent: {0}", request. UserAgent);
    Console.WriteLine("Accept-Encoding: {0}", żądanie. nagłówki["Accept-Encoding"]);
    Console.WriteLine("Połączenie: {0}",
        prośba. Zachowaj życie? "Keep-Alive" : "blisko");
    Console.WriteLine("Host: {0}"), request. UserHostName);
    Console.WriteLine("Pragma: {0}", prośba. nagłówki["Pragma"]);
    Zdobądź cel odpowiedzi
    HttpListenerResponse response = kontekst. Odpowiedź;
    Skonstruuj treść odpowiedzi
    odpowiedź ciągu
        = @"<html>
                <head><title>Z serwera HttpListener</title></head>
                <body><h1>Cześć ludzie.</h1></body>
            ";</html>
    Ustaw zawartość nagłówka odpowiedzi, długość i kodowanie
    odpowiedź. ContentLength64
        = System.Text.Encoding.UTF8.GetByteCount(responseString);
    odpowiedź. ContentType = "tekst/html; charset=UTF-8";
    Odpowiedzi wyjściowe
    System.IO.Stream output = odpowiedź. OutputStream;
    System.IO.StreamWriter writer = nowy System.IO.StreamWriter(output);
    pisarz. Write(responseString);
    Strumień wyjściowy musi być wyłączony
    pisarz. Close();
    if (Console.KeyAvailable)
        przerwę;
}
Wyłącz serwer
słuchacz. Stop();

Podczas korzystania z HttpListener często używane parametry żądań i odpowiedzi stają się właściwościami obiektowymi, co znacznie zmniejsza obciążenie programistyczne. Jednak większość parametrów nadal wymaga dostępu przez indeksator Headers, podobnie jak parametr żądania Accept-Encoding w powyższym przykładzie, do którego nie mamy bezpośredniego dostępu przez właściwości.




Poprzedni:Pliki CSS i pliki js są poprzedzone znakiem zapytania
Następny:Dzień się zaczął!! Chodźcie wszyscy
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com