Untuk lebih menyederhanakan pendengar untuk protokol HTTP, . .NET menyediakan kelas HttpListener di System.Net namespace. Mengiringi objek ini, . .NET menyediakan serangkaian objek terkait yang merangkum pekerjaan pemrosesan HTTP. Perhatikan bahwa kelas ini menggunakan komponen sistem Http.sys untuk menyelesaikan pekerjaan, sehingga hanya dapat digunakan pada sistem operasi Windows XPSP2 atau Server 2003 atau yang lebih baru.
Kelas HttpListener lebih menyederhanakan operasi mendengarkan, dan hanya perlu memberikan alamat mendengarkan, nomor port, dan jalur virtual melalui metode string untuk memulai pekerjaan mendengarkan.
Setelah mulai mendengarkan, metode GetContext akan memblokir utas, ketika permintaan klien tiba, HttpListener mengembalikan objek HttpListenerContext sebagai proksi umum untuk memproses permintaan klien, melalui properti Request dari objek proxy, kita bisa mendapatkan objek jenis HttpListenerRequest yang mewakili parameter permintaan, objek ini mengobjektifikasi sebagian besar parameter permintaan, jadi , kita bisa mendapatkan parameter permintaan melalui serangkaian properti yang disediakannya. Misalnya, properti HttpMethod dari HttpListenerRequest menyediakan jenis metode yang diminta. Melalui atribut Response proxy, kita dapat memperoleh objek pemrosesan respons jenis HttpListenerResponse, yang merangkum data dan operasi respons, yang sangat menyederhanakan beban kerja pemrograman respons, dan proses kerjanya adalah sebagai berikut:
//检查系统是否支持 jika (! HttpListener.IsSupported)
{ lempar System baru.InvalidOperationException( "Untuk menggunakan HttpListener, Anda harus menggunakan Windows XP SP2 atau Server 2003 atau yang lebih baru!" );
} Perhatikan bahwa awalan harus diakhiri dengan garis miring / maju awalan string[] = string baru[] { "http://localhost:49152/" }; Buat pendengar. HttpListener listener = HttpListener(); baru Tambahkan awalan monitor. foreach (string s dalam awalan)
{ pendengar. Prefixes.Add(s);
} Mulai mendengarkan pendengar. Mulai(); Console.WriteLine(" mendengarkan..."); sementara (benar)
{ Catatan: Metode GetContext akan memblokir utas hingga permintaan tiba Konteks HttpListenerContext = pendengar. GetContext(); Mendapatkan objek permintaan Permintaan HttpListenerRequest = konteks. Permintaan; Console.WriteLine("{0} {1} HTTP/1.1", permintaan. HttpMethod, permintaan. RawUrl); Console.WriteLine("Accept: {0}", string. Gabungkan(",", permintaan. Menerima Jenis)); Console.WriteLine("Accept-Language: {0}", string. Gabungkan(",", permintaan. Bahasa Pengguna)); Console.WriteLine("User-Agent: {0}", permintaan. Agen Pengguna); Console.WriteLine("Accept-Encoding: {0}", permintaan. Headers["Accept-Encoding"]); Console.WriteLine("Koneksi: {0}", permintaan. KeepAliv e ? "Keep-Alive" : "dekat"); Console.WriteLine("Host: {0}", permintaan. UserHostName); Console.WriteLine("Pragma: {0}", permintaan. Header["Pragma"]); Mendapatkan target respons Respons HttpListenerResponse = konteks. tanggapan; Membuat konten respons string responseString = @"<html> <head><title>Dari Server HttpListener</title></head> <body><h1>Halo dunia.</h1></body> ";</html> Mengatur konten header respons, panjang, pengkodean tanggapan. PanjangKonten64 = System.Text.Encoding.UTF8.GetByteCount(responseString); tanggapan. ContentType = "teks/html; charset = UTF-8"; Respons keluaran Output System.IO.Stream = respons. Aliran Keluaran; System.IO.StreamWriter writer = System.IO.StreamWriter baru(keluaran); penulis. Write(responseString); Aliran keluaran harus dimatikan penulis. Tutup(); if (Console.KeyAvailable) istirahat;
} Matikan server pendengar. Berhenti();
Saat menggunakan HttpListener, parameter permintaan dan respons yang umum digunakan menjadi properti objek, yang sangat mengurangi beban kerja pemrograman. Namun, sebagian besar parameter masih perlu diakses melalui pengindeks Headers, seperti parameter permintaan Accept-Encoding dalam contoh di atas, yang tidak dapat kita akses langsung melalui properti. |