|
|
게시됨 2015. 12. 21. 오전 11:00:26
|
|
|

HTTP 프로토콜의 리스너를 더욱 단순화하기 위해, . .NET은 이름 공간 System.Net 에서 HttpListener 클래스를 제공합니다. 이 물체와 함께, . .NET은 HTTP 처리 작업을 캡슐화하는 일련의 관련 객체를 제공합니다. 이 클래스는 Http.sys 시스템 컴포넌트를 사용해 작업을 수행하므로 Windows XPSP2 또는 Server 2003 이후 운영체제에서만 사용할 수 있습니다.
HttpListener 클래스는 리스닝 작업을 더욱 단순화하며, 리스닝 작업은 듣기 작업을 시작하기 위해 리스닝 주소, 포트 번호, 문자열 메서드를 통한 가상 경로만 제공하면 됩니다.
듣기 시작하면 GetContext 메서드가 스레드를 차단합니다. 클라이언트의 요청이 도착하면 HttpListenerContext 객체를 클라이언트 요청을 처리하는 일반 프록시로 반환합니다. 프록시 객체의 Request 속성을 통해 HttpListenerRequest 타입의 객체를 얻을 수 있으며, 이 객체는 대부분의 요청 매개변수를 객체화합니다. , 요청 매개변수는 제공하는 일련의 속성을 통해 얻을 수 있습니다. 예를 들어, HttpListenerRequest의 HttpMethod 속성은 요청된 메서드 유형을 제공합니다. 프록시의 Response 속성을 통해 HttpListenerResponse 타입의 응답 처리 객체를 얻을 수 있는데, 이는 응답의 데이터와 작업을 캡슐화하여 응답의 프로그래밍 작업을 크게 단순화합니다. 작업 과정은 다음과 같습니다:
//检查系统是否支持 만약 (! HttpListener.IsSupported)
{ throw new System.InvalidOperationException( "HttpListener를 사용하려면 Windows XP SP2 또는 Server 2003 이상이어야 합니다!" );
} 접두사는 반드시 / 앞 슬래시로 끝나야 한다는 점에 유의하세요 string[] 접두사 = 새로운 문자열[] { "http://localhost:49152/" }; 청취자를 만드세요. HttpListener listener = new HttpListener(); 모니터의 접두사를 추가하세요. foreach (접두사 내 문자열 s)
{ 청취자. 접두사.Add(s);
} 듣기 시작해 청취자. Start(); Console.WriteLine("듣고 있음..."); while (참)
{ 참고: GetContext 메서드는 요청이 도착할 때까지 스레드를 차단합니다 HttpListenerContext context = listener. GetContext(); 요청 객체를 얻으세요 HttpListenerRequest 요청 = context. 요청; Console.WriteLine("{0} {1} HTTP/1.1", 요청. HttpMethod, 요청. RawUrl); Console.WriteLine("수락: {0}", 문자열. 조인(",", 요청). AcceptTypes)); Console.WriteLine("Accept-Language: {0}", 끈. 조인(",", 요청). 사용자 언어)); Console.WriteLine("User-Agent: {0}", 요청. UserAgent); Console.WriteLine("Accept-Encoding: {0}", 요청. 헤더["Accept-Encoding"]); Console.WriteLine("연결: {0}", 요청. KeepAliv e ? "킵-얼라이브" : "가까운"); Console.WriteLine("호스트: {0}", 요청. UserHostName); Console.WriteLine("Pragma: {0}", 요청. 헤더["Pragma"]); 응답 목표를 잡아요 HttpListenerResponse 응답 = 맥락. 반응; 응답 내용을 구성하세요 문자열 응답문자열 = @"<html> <head><title>HttpListener 서버에서</title></head> <body><h1>전 세계 여러분 안녕하세요.</h1></body> ";</html> 응답 헤더 내용, 길이, 인코딩을 설정하세요 응답. ContentLength64 = System.Text.Encoding.UTF8.GetByteCount(responseString); 응답. ContentType = "text/html; charset=UTF-8"; 출력 응답 System.IO.Stream 출력 = 응답. OutputStream; System.IO.StreamWriter writer = new System.IO.StreamWriter(output); 작가. Write(responseString); 출력 스트림은 반드시 꺼져야 합니다 작가. 클로즈(); if (Console.KeyAvailable) 브레이크;
} 서버를 종료하세요 청취자. Stop();
HttpListener를 사용할 때, 일반적으로 사용되는 요청 및 응답 매개변수가 객체 속성으로 지정되어 프로그래밍 작업 부담을 크게 줄입니다. 하지만 대부분의 매개변수는 여전히 헤더 인덱서를 통해 접근해야 하며, 위 예시의 Accept-Encoding request 매개변수와 마찬가지로 속성 내에서 직접 접근할 수 없습니다. |
이전의:CSS 파일과 js 파일 뒤에는 물음표가 붙습니다다음:하루가 시작됐어요!! 자, 모두 같이
|