public override void handlePOSTRequest(HttpProcessor p, StreamReader inputData) { string PostData = inputData.ReadToEnd(); Console.WriteLine("POST request: {0}", p.http_url); Console.WriteLine("POST Data: {0}", PostData); this.OnResponse(p); }
private void OnResponse(HttpProcessor p) { string UrlPath; if (string.Compare(p.http_url, "/") == 0) { UrlPath = _rootDirectory + "\\"; foreach (object DefaultDocument in _DefaultDocuments) { UrlPath = string.Concat(UrlPath, DefaultDocument); if (File.Exists(UrlPath)) { break; } } } else { UrlPath = _rootDirectory + HttpUtility.UrlDecode(p.http_url).Replace("/", "\\"); } if (File.Exists(UrlPath)) { FileInfo fi = new FileInfo(UrlPath); if (p.httpHeaders.ContainsKey("If-Modified-Since") && p.httpHeaders["If-Modified-Since"] != null && p.httpHeaders["If-Modified-Since"].ToString() == fi.LastWriteTimeUtc.ToString("r")) // 클라이언트 브라우저의 캐시 날짜를 읽는다. { // 클라이언트 캐시상에 컨텐츠와 서버상의 컨텐츠가 수정된 내용이 없으면(파일의 마지막 수정날짜가 같다면) 304응답 리턴 p.Write(RequestStatus.Not_Modified); } else { lock (_lockObject) { string MimeType = GetMimeType(UrlPath); p.fs = new FileStream(UrlPath, FileMode.Open); p.Write(RequestStatus.Ok, fi.LastWriteTimeUtc.ToString("r"), MimeType); } } fi = null; } else { p.Body = "<html><body><h1>File not found!!</h1></html>"; p.Write(RequestStatus.Ok); } }
/// <summary> /// 비동기 방식으로 클라이언트 접속 처리 /// </summary> /// <param name="listener"></param> /// <returns></returns> private async Task HandleConnectionsAsync(TcpListener listener) { // 항상 클라이언트 접속요청을 대기 한다. while (_IsActive) { Console.Write("Waiting for async connection..."); // 비동기로 클라이언트 접속을 받아드린다. var client = await listener.AcceptTcpClientAsync(); // 클라이언트 접속! IPEndPoint RemoteIPAddress = ((IPEndPoint)(client.Client.RemoteEndPoint)); Console.WriteLine("OK # {0}", RemoteIPAddress.Address.ToString()); // 클라이언트의 요청을 처리 [비동기 방식] HttpProcessor processor = new HttpProcessor(client, this); var HttpProcessorTask = new Task(() => processor.process()); HttpProcessorTask.Start(); } }
public override void handleGETRequest(HttpProcessor p) { this.OnResponse(p); }
/// <summary> /// POST방식으로 요청시 처리 /// </summary> /// <param name="p"></param> /// <param name="inputData"></param> public abstract void handlePOSTRequest(HttpProcessor p, StreamReader inputData);
/// <summary> /// GET방식으로 요청시 처리 /// </summary> /// <param name="p"></param> public abstract void handleGETRequest(HttpProcessor p);