Skip to content

C언어와 BSD 소켓 API를 사용하여 구현한 간단한 HTTP 서버

Notifications You must be signed in to change notification settings

ssxrxbx/BSD-socket

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BSD Socket HTTP Server

프로젝트 개요

본 프로젝트는 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

주요 코드 설명 (server.c)

  • 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" 내용을 담고 있습니다.
  • 소스 파일/ 디렉토리에는 다양한 형식의 샘플 파일들이 포함되어 있어, 서버의 파일 제공 기능을 테스트하는 데 사용할 수 있습니다.
  • 결과 화면/ 디렉토리에는 서버 실행 및 파일 요청 결과에 대한 스크린샷들이 포함되어 있습니다.

About

C언어와 BSD 소켓 API를 사용하여 구현한 간단한 HTTP 서버

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published