본 프로젝트는 C언어로 작성된 간단한 HTTP 서버입니다. BSD 소켓 API를 사용하여 TCP/IP 통신을 구현하며, 지정된 포트에서 클라이언트의 HTTP 요청을 수신하고 정적 파일을 제공합니다.
- 지정된 포트에서 클라이언트 연결 수신
- HTTP GET 요청 처리
- 요청된 파일의 존재 여부 확인
- 파일이 없을 경우: 404 Not Found 응답
- 요청 경로가 파일이 아닐 경우: 403 Forbidden 응답
- 파일 형식에 따른 Content-Type 지정 (JPEG, PNG, GIF, PDF, MP3, HTML)
- 파일 내용 전송
- 기본 HTML 페이지 (
index.html) 제공
BSD-socket-master/
├── .DS_Store
├── CSE3027 PRO1.pdf # 프로젝트 관련 PDF (추정)
├── Makefile # 컴파일을 위한 Makefile
├── README.md # 프로젝트 설명 파일 (현재 파일)
├── index.html # 기본으로 제공되는 HTML 파일
├── server # 컴파일된 서버 실행 파일
├── server.c # 서버 소스 코드
├── server.o # 컴파일된 오브젝트 파일
├── 결과 화면/ # 서버 실행 결과 스크린샷 폴더
│ ├── .DS_Store
│ ├── 404 not found.png
│ ├── 404 terminal.png
│ ├── Ghibli.png
│ ├── cat .png
│ ├── cat terminal.png
│ ├── dog terminal.png
│ ├── dog.png
│ ├── ghibli terminal.png
│ ├── ghost terminal.png
│ ├── ghost.png
│ ├── index terminal.png
│ ├── index.png
│ ├── queens garden terminal.png
│ └── queens garden.png
└── 소스 파일/ # 서버에서 제공할 수 있는 예시 정적 파일 폴더
├── .DS_Store
├── Cat.jpeg
├── Dog.jpg
├── Ghibli.png
├── Ghost.gif
├── QueensGarden.mp3
└── test.png
터미널에서 다음 명령어를 사용하여 서버를 빌드할 수 있습니다:
make빌드가 성공하면 server 실행 파일이 생성됩니다.
터미널에서 다음 명령어를 사용하여 서버를 실행합니다:
./server [포트번호]예시:
./server 8080서버가 실행되면 지정된 포트에서 클라이언트의 연결을 기다립니다. 웹 브라우저에서 http://localhost:[포트번호]/[요청할 파일] 형식으로 접속하여 파일을 요청할 수 있습니다.
예시: http://localhost:8080/index.html 또는 http://localhost:8080/소스%20파일/Cat.jpeg
error(char *msg): 오류 발생 시 메시지를 출력하고 프로그램을 종료하는 함수입니다.getContentType(char *path): 파일 경로를 입력받아 파일 확장자에 따라 적절한 HTTP Content-Type 문자열을 반환합니다. 지원하는 형식은 JPEG, PNG, GIF, PDF, MP3, HTML 입니다.handleRequest(int client_socket): 클라이언트의 HTTP 요청을 처리합니다.- 요청 메시지를 읽고 파일명을 파싱합니다.
- 요청된 파일의 상태를 확인하고, 존재하지 않거나 일반 파일이 아니면 적절한 오류(404, 403)를 응답합니다.
- 파일을 열고, 성공하면 200 OK 응답과 함께 파일 내용을 전송합니다.
- 파일 열기에 실패하면 500 Internal Server Error를 응답합니다.
main(int argc, char *argv[]): 프로그램의 주 진입점입니다.- 실행 인자로 포트 번호를 받습니다.
- 소켓 생성, 서버 주소 설정, 소켓 바인딩, 리슨 과정을 수행합니다.
- 무한 루프를 돌며 클라이언트의 연결을 수락(
accept)하고, 각 연결에 대해handleRequest함수를 호출하여 요청을 처리합니다.
index.html파일은 "Hello, it's my project1" 와 "2020064911 Seong surib" 내용을 담고 있습니다.소스 파일/디렉토리에는 다양한 형식의 샘플 파일들이 포함되어 있어, 서버의 파일 제공 기능을 테스트하는 데 사용할 수 있습니다.결과 화면/디렉토리에는 서버 실행 및 파일 요청 결과에 대한 스크린샷들이 포함되어 있습니다.