Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        /// <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();
            }
        }
Пример #4
0
 public override void handleGETRequest(HttpProcessor p)
 {
     this.OnResponse(p);
 }
Пример #5
0
 /// <summary>
 /// POST방식으로 요청시 처리
 /// </summary>
 /// <param name="p"></param>
 /// <param name="inputData"></param>
 public abstract void handlePOSTRequest(HttpProcessor p, StreamReader inputData);
Пример #6
0
 /// <summary>
 /// GET방식으로 요청시 처리
 /// </summary>
 /// <param name="p"></param>
 public abstract void handleGETRequest(HttpProcessor p);