Skip to content

try3982/socket-programming

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

2 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

myserver.c μ½”λ“œ κ°œμš”

이 ν”„λ‘œκ·Έλž¨μ€ ν΄λΌμ΄μ–ΈνŠΈλ‘œλΆ€ν„° HTTP μš”μ²­μ„ 받아듀이고, μš”μ²­λœ νŒŒμΌμ„ 읽어 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ‘λ‹΅ν•˜λŠ” κΈ°λŠ₯을 μˆ˜ν–‰ν•©λ‹ˆλ‹€. 닀쀑 ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ ν”„λ‘œμ„ΈμŠ€λ₯Ό forkν•˜λŠ” λ°©μ‹μœΌλ‘œ κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

ν•¨μˆ˜ μ„€λͺ…

main ν•¨μˆ˜ ν”„λ‘œκ·Έλž¨μ˜ μ§„μž…μ μž…λ‹ˆλ‹€. μ‚¬μš©μžλ‘œλΆ€ν„° 포트 번호λ₯Ό μž…λ ₯λ°›κ³ , μ„œλ²„ μ†ŒμΌ“μ„ μƒμ„±ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ˜ 연결을 λŒ€κΈ° ν•©λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄ handle_request ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ μš”μ²­μ„ μ²˜λ¦¬ν•©λ‹ˆλ‹€. handle_request ν•¨μˆ˜ ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈμ™€μ˜ 연결이 μ„±κ³΅ν•˜λ©΄ μƒˆλ‘œμš΄ ν”„λ‘œμ„ΈμŠ€λ₯Ό forkν•˜μ—¬ μš”μ²­μ„ μ²˜λ¦¬ν•©λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ νŒŒμ‹±ν•˜κ³ , μš”μ²­λœ νŒŒμΌμ„ μ°Ύμ•„ send_response ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ 응닡을 λ³΄λƒ…λ‹ˆ λ‹€.

send_response ν•¨μˆ˜ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ HTTP 응닡을 λ³΄λ‚΄λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. μš”μ²­λœ νŒŒμΌμ„ μ½μ–΄μ„œ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ „μ†‘ν•©λ‹ˆλ‹€. μš”μ²­λœ 파일 의 ν™•μž₯μžμ— 따라 μ μ ˆν•œ Content-Type 헀더λ₯Ό μ„€μ •ν•˜μ—¬ μ‘λ‹΅ν•©λ‹ˆλ‹€.

get_file_size ν•¨μˆ˜ 파일의 크기λ₯Ό κ΅¬ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. 파일 끝으둜 μ΄λ™ν•œ ν›„ ν˜„μž¬ 파일 μœ„μΉ˜λ₯Ό κ°€μ Έμ™€μ„œ 파일의 크기λ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€.

send_file ν•¨μˆ˜ νŒŒμΌμ„ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ „μ†‘ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. νŒŒμΌμ„ μ½μ–΄μ„œ BUFFER_SIZE λ‹¨μœ„λ‘œ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ „μ†‘ν•©λ‹ˆλ‹€.

μ–΄λ €μ› λ˜ λΆ€λΆ„ HTTP 헀더 μ²˜λ¦¬ν•˜λŠ” λΆ€λΆ„ : HTTP μš”μ²­κ³Ό μ‘λ‹΅μ˜ 헀더λ₯Ό μ μ ˆν•˜κ²Œ μ²˜λ¦¬ν•˜λŠ” 것이 μ–΄λ €μ› μŠ΅λ‹ˆλ‹€. 특히, Content- Type 헀더λ₯Ό μ˜¬λ°”λ₯΄κ²Œ μ„€μ •ν•˜κ³  μš”μ²­λœ νŒŒμΌμ„ μ „μ†‘ν•˜λŠ” κ³Όμ •μ—μ„œ λ§Žμ€ 어렀움을 κ²ͺμ—ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 파일의 ν™•μž₯자λ₯Ό ν™•μΈν•˜μ—¬ μ μ ˆν•œ Content-Type 헀더λ₯Ό μ„€μ •ν–ˆμŠ΅λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” λΆ€λΆ„μ—μ„œ κ²ͺ은 μ–΄λ €μ› λ˜ 였λ₯˜λ“€:

파일 λ¬΄ν•œ 읽기 루프: νŒŒμΌμ„ μ½μ–΄μ˜€λŠ” κ³Όμ •μ—μ„œ λ¬΄ν•œ 루프가 λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” νŒŒμΌμ„ 읽을 λ•Œ 파일의 끝에 도달 ν•˜μ—¬ fread ν•¨μˆ˜κ°€ 0을 λ°˜ν™˜ν•˜μ§€ μ•Šμ•„μ„œ λ°œμƒν•œ λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ νŒŒμΌμ„ 읽을 λ•Œ 파일의 끝에 도 λ‹¬ν–ˆλŠ”μ§€λ₯Ό ν™•μΈν•˜κ³ , 더 이상 읽을 데이터가 없을 λ•Œμ—λ§Œ 루프λ₯Ό μ’…λ£Œν•˜λ„λ‘ μˆ˜μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

닀쀑 ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­ 처리: μ›Ή μ„œλ²„λŠ” λ‹€μˆ˜μ˜ ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ„ λ™μ‹œμ— μ²˜λ¦¬ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ κΈ°μ‘΄ μ½” λ“œλŠ” ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­λ§Œμ„ μ²˜λ¦¬ν•˜λŠ” λ°©μ‹μœΌλ‘œ λ™μž‘ν•˜κ³  μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 클라이언 트 μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” ν•¨μˆ˜μΈ handle_requestμ—μ„œ μžμ‹ ν”„λ‘œμ„ΈμŠ€λ₯Ό μƒμ„±ν•˜μ—¬ μš”μ²­μ„ μ²˜λ¦¬ν•˜λ„λ‘ λ³€κ²½ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 μ—¬λŸ¬ ν΄λΌμ΄μ–ΈνŠΈμ˜ λ™μ‹œ μš”μ²­μ„ μ²˜λ¦¬ν•  수 있게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published