Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 17368|Yanıt: 0

[Kaynak] HttpListener tabanlı web sunucusu

[Bağlantıyı kopyala]
Yayınlandı 21.12.2015 11:00:26 | | |

HTTP protokolü için dinleyicileri daha da basitleştirmek için, . .NET, System.Net isim alanında HttpListener sınıfını sağlar. Bu nesneye eşlik ederek, . .NET, HTTP işleme işini kapsayan bir dizi ilgili nesne sağlar. Bu sınıfın işi tamamlamak için Http.sys sistem bileşenleri kullandığını unutmayın, bu nedenle yalnızca Windows XPSP2 veya Server 2003 veya daha sonraki işletim sistemlerinde kullanılabilir.

HttpListener sınıfı, dinleme işlemini daha da basitleştirir ve dinleme çalışmasını başlatmak için yalnızca dinleme adresi, port numarası ve string yöntemi üzerinden sanal yolu sağlaması yeterlidir.

Dinlemeye başladıktan sonra, GetContext yöntemi iş parçacığını engeller, istemcinin isteği geldiğinde, HttpListener istemci isteklerini işlemek için genel proxy olarak bir HttpListenerContext nesnesini döndürür, proxy nesnesinin Request özelliği üzerinden istek parametrelerini temsil eden HttpListenerRequest tipinde bir nesne elde edebiliriz, bu nesne istek parametrelerinin çoğunu nesneleştirir, yani , talep parametrelerini sağladığı bir dizi özellik üzerinden alabiliriz. Örneğin, HttpListenerRequest'in HttpMethod özelliği istenen metod türünü sağlar. Proxy'nin Yanıt özelliği sayesinde, yanıtın verilerini ve işlemlerini kapsayan HttpListenerResponse tipinde bir yanıt işleme nesnesi elde edebiliriz; bu da yanıtın programlama iş yükünü büyük ölçüde basitleştirir ve çalışma süreci şu şekildedir:
//检查系统是否支持
if (! httpListener.IsSupported)
{
    throw new System.InvalidOperationException(
        "HttpListener kullanmak için Windows XP SP2 veya Server 2003 veya daha yeni işletim sisteminde olmanız gerekir!" );
}
Önekin / ileri eğimle bitmesi gerektiğini unutmayın
string[] önekleri = yeni dize[] { "http://localhost:49152/" };
Bir dinleyici yaratın.
HttpListener dinleyici = yeni HttpListener();
Monitörün ön ekini ekle.
foreach (ön eklerde s dizi)
{
    dinleyici. Önekler.Ekleme(ler);
}
Dinlemeye başla
dinleyici. Start();
Console.WriteLine("dinliyor...");
Doğrudur
{
    Not: GetContext yöntemi, istek gelene kadar iş parçacığını engeller
    HttpListenerContext Context = dinleyici. GetContext();
    İstek nesnesini alın
    HttpListenerRequest request = bağlam. Talep;
    Console.WriteLine("{0} {1} HTTP/1.1", request. HttpMethod, talep ediyorum. RawUrl);
    Console.WriteLine("Accept: {0}", string. Katıl(",", istek. AcceptTypes));
    Console.WriteLine("Kabul Dili: {0}",
        ip. Katıl(",", istek. UserLanguages));
    Console.WriteLine("User-Agent: {0}", request. UserAgent);
    Console.WriteLine("Accept-Encoding: {0}", request. başlıklar["Accept-Encoding"]);
    Console.WriteLine("Bağlantı: {0}",
        Talep. Devam et ki ? "Hayatta Kalmak" : "yakın");
    Console.WriteLine("Host: {0}", request. UserHostName);
    Console.WriteLine("Pragma: {0}", request. Başlıklar["Pragma"]);
    Yanıt hedefini alın
    HttpListenerResponse yanıtı = bağlam. Yanıt;
    Yanıt içeriğini oluştur
    dize yanıtıString
        = @"<html>
                <head><title>HttpListener Sunucusu'ndan</title></head>
                <body><h1>Merhaba Dünya.</h1></body>
            ";</html>
    Yanıt başlığı içeriğini, uzunluğunu, kodlamasını ayarlayın
    Yanıt. ContentLength64
        = System.Text.Encoding.UTF8.GetByteCount(responseString);
    Yanıt. ContentType = "metin/html; charset=UTF-8";
    Çıkış yanıtları
    System.IO.Stream çıktısı = yanıt. OutputStream;
    System.IO.StreamWriter yazıcı = yeni System.IO.StreamWriter(çıktı);
    yazar. Write(responseString);
    Çıkış akışı kapatılmalıdır
    yazar. Close();
    if (Console.KeyAvailable)
        mola;
}
Sunucuyu kapat
dinleyici. Dur();

HttpListener kullanıldığında, yaygın olarak kullanılan istek ve yanıt parametreleri nesne özelliklerine dönüşür ve bu da programlama iş yükünü büyük ölçüde azaltır. Ancak, parametrelerin çoğuna hâlâ Headers indeksleyicisi üzerinden erişilmesi gerekiyor; yukarıdaki örnekte olduğu gibi Accept-Encoding request parametresi gibi, ki bu parametrelere doğrudan özellikler üzerinden erişemiyoruz.




Önceki:CSS dosyaları ve js dosyalarının ardından bir soru işareti gelir
Önümüzdeki:Gün başladı!! Hadi herkes
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com