Για περαιτέρω απλοποίηση των ακροατών για το πρωτόκολλο HTTP, . Το .NET παρέχει την κλάση HttpListener στον χώρο ονομάτων System.Net. Συνοδεύοντας αυτό το αντικείμενο, . Το .NET παρέχει μια σειρά σχετικών αντικειμένων που ενσωματώνουν εργασίες επεξεργασίας HTTP. Σημειώστε ότι αυτή η κλάση χρησιμοποιεί Http.sys στοιχεία συστήματος για να ολοκληρώσει την εργασία, επομένως μπορεί να χρησιμοποιηθεί μόνο σε λειτουργικά συστήματα Windows XPSP2 ή Server 2003 ή νεότερα.
Η κλάση HttpListener απλοποιεί περαιτέρω τη λειτουργία ακρόασης και χρειάζεται μόνο να παρέχει τη διεύθυνση ακρόασης, τον αριθμό θύρας και την εικονική διαδρομή μέσω της μεθόδου συμβολοσειράς για να ξεκινήσει η εργασία ακρόασης.
Μετά την έναρξη της ακρόασης, η μέθοδος GetContext θα μπλοκάρει το νήμα, όταν φτάσει το αίτημα του πελάτη, το HttpListener επιστρέφει ένα αντικείμενο HttpListenerContext ως γενικό διακομιστή μεσολάβησης για την επεξεργασία αιτημάτων πελατών, μέσω της ιδιότητας Request του αντικειμένου διακομιστή μεσολάβησης, μπορούμε να λάβουμε ένα αντικείμενο τύπου HttpListenerRequest που αντιπροσωπεύει τις παραμέτρους αιτήματος, αυτό το αντικείμενο αντικειμενοποιεί τις περισσότερες από τις παραμέτρους αιτήματος, έτσι ώστε , μπορούμε να λάβουμε τις παραμέτρους αιτήματος μέσω μιας σειράς ιδιοτήτων που παρέχει. Για παράδειγμα, η ιδιότητα HttpMethod του HttpListenerRequest παρέχει τον τύπο μεθόδου που ζητήθηκε. Μέσω του χαρακτηριστικού Response του διακομιστή μεσολάβησης, μπορούμε να αποκτήσουμε ένα αντικείμενο επεξεργασίας απόκρισης τύπου HttpListenerResponse, το οποίο ενσωματώνει τα δεδομένα και τις λειτουργίες της απόκρισης, γεγονός που απλοποιεί σημαντικά τον φόρτο εργασίας προγραμματισμού της απόκρισης και η διαδικασία εργασίας έχει ως εξής:
//检查系统是否支持 αν (! HttpListener.IsSupported)
{ ρίξε νέο System.InvalidOperationException( "Για να χρησιμοποιήσετε το HttpListener, πρέπει να χρησιμοποιείτε Windows XP SP2 ή Server 2003 ή νεότερη έκδοση!" );
} Σημειώστε ότι το πρόθεμα πρέπει να τελειώνει με κάθετο / προς τα εμπρός string[] προθέματα = νέα συμβολοσειρά[] { "http://localhost:49152/" }; Δημιουργήστε έναν ακροατή. HttpListener listener = νέο HttpListener(); Προσθέστε το πρόθεμα της οθόνης. foreach (συμβολοσειρά s σε προθέματα)
{ ακροατή. Προθέματα.Προσθήκη(ες);
} Ξεκινήστε να ακούτε ακροατή. Έναρξη(); Console.WriteLine(" ακούγοντας..."); ενώ (αληθές)
{ Σημείωση: Η μέθοδος GetContext θα αποκλείσει το νήμα μέχρι να φτάσει το αίτημα HttpListenerContext context = ακροατής. GetContext(); Λήψη του αντικειμένου αιτήματος HttpListenerRequest request = context. Αίτημα; Console.WriteLine("{0} {1} HTTP/1.1", αίτημα. HttpMethod, αίτημα. RawUrl); Console.WriteLine("Αποδοχή: {0}", συμβολοσειρά. Join(",", αίτηση. AcceptTypes)); Console.WriteLine("Accept-Language: {0}", συμβολοσειρά. Join(",", αίτηση. UserLanguages)); Console.WriteLine("User-Agent: {0}", αίτημα. UserAgent); Console.WriteLine("Αποδοχή-Κωδικοποίηση: {0}", αίτημα. Κεφαλίδες["Αποδοχή-Κωδικοποίηση"]); Console.WriteLine("Σύνδεση: {0}", αίτηση. KeepAliv e ? "Keep-Alive" : "κλείσιμο"); Console.WriteLine("Κεντρικός υπολογιστής: {0}", αίτημα. Όνομα_χρήστη); Console.WriteLine("Pragma: {0}", request. Κεφαλίδες["Pragma"]); Λάβετε τον στόχο απόκρισης HttpListenerResponse response = πλαίσιο. Απάντηση; Κατασκευάστε το περιεχόμενο της απάντησης απόκριση συμβολοσειράςString = @"<html> <head><title>Από τον διακομιστή HttpListener</title></head> <body><h1>Γεια σου κόσμε.</h1></body> </html>"; Ορίστε το περιεχόμενο, το μήκος, την κωδικοποίηση της κεφαλίδας απόκρισης απάντηση. ΜήκοςΠεριεχομένου64 = System.Text.Encoding.UTF8.GetByteCount(responseString); απάντηση. ContentType = "κείμενο/html; σύνολο χαρακτήρων=UTF-8"; Αποκρίσεις εξόδου System.IO.Έξοδος ροής = απόκριση. Ροή εξόδου; System.IO.StreamWriter writer = νέο System.IO.StreamWriter(έξοδος); συγγραφέας. Write(responseString); Η ροή εξόδου πρέπει να είναι απενεργοποιημένη συγγραφέας. Κλείσιμο(); αν (Console.KeyAvailable) διάλειμμα;
} Τερματισμός λειτουργίας του διακομιστή ακροατή. Διακοπή();
Όταν χρησιμοποιείτε το HttpListener, οι παράμετροι αίτησης και απόκρισης που χρησιμοποιούνται συνήθως γίνονται ιδιότητες αντικειμένου, γεγονός που μειώνει σημαντικά τον φόρτο εργασίας προγραμματισμού. Ωστόσο, οι περισσότερες από τις παραμέτρους πρέπει ακόμα να προσπελαστούν μέσω του ευρετηρίου Headers, όπως ακριβώς και η παράμετρος αιτήματος Αποδοχή-Κωδικοποίηση στο παραπάνω παράδειγμα, στην οποία δεν μπορούμε να έχουμε πρόσβαση απευθείας μέσω των ιδιοτήτων. |