2021 Unix Project!
- ์ ๋์ค ์์คํ ์์ ์๊ฐ์ ๋ฐฐ์ด ๋ด์ฉ์ ์์ฉํ์ฌ ์ฌ๋ฌผํจ ๊ด๋ฆฌ ์์คํ ์ ๊ตฌํํ๋ ํ๋ก์ ํธ ์ด๋ค.
- Server์์๋ ์ฌ๋ฌผํจ์ ๊ด๋ฆฌํ๋ ์ญํ ์ ์ํํ๊ณ , Client์์๋ ์ฌ๋ฌผํจ ๊ด๋ฆฌ ์์คํ ์ ๊ณ ๊ฐ ์ญํ ์ ์ํํ๋ค.
- Server์ Client๊ฐ ํต์ ์ ํ ์ ์๋๋ก ์์ผ์ ์ฌ์ฉํ์๊ณ ์ฌ๋ฌ ๊ฐ(๋ช )์ Client๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฐ๋ ๋๋ฅผ ์ฌ์ฉํ์๋ค.
-
Server
- ์ฌ์ฉ์์๊ฒ ์ฌ๋ฌผํจ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
- ์ฌ์ฉ์์๊ฒ ์ฌ๋ฌผํจ ํ ๋น ์ ํจ์ค์๋๋ฅผ ์ง์ ํ๋๋ก ํ๋ค.
- ์ฌ์ฉ์๊ฐ ๋ณธ์ธ ์ฌ๋ฌผํจ์ ์ ๊ทผ ์ ์ ๋ ฅํ๋ ํจ์ค์๋๊ฐ ๋ง๋์ง ํ์ธํ๊ณ , ๋ง์ผ๋ฉด ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ํ๋ค.
-
Client
- ์ํ๋ ์ฌ๋ฌผํจ์ ์ ๊ทผํ๋ค.
- ํด๋น ์ฌ๋ฌผํจ์ ๋น๋ฐ๋ฒํธ ์ค์ ๋ฐ ์ ๋ ฅ ๊ธฐ๋ฅ์ด ์๋ค.
-
๋ค์ค ์ ์ ๋ฐ ์ฌ๋ฌผํจ ์ ๋ณด ์ค์๊ฐ์ผ๋ก ๋ฐ์
- thread์ socket ์ฌ์ฉ
- ๋ฉํฐ ์ค๋ ๋๋ ๋ฉํฐ ํ๋ก์ธ์ค๋ณด๋ค ์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ์ฌ์ฉ, ์ด์์ฒด์ ๊ฐ ์์คํ ์์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌ
- ์๋ก์ด client๊ฐ ์ ์ํ๋ฉด, server์์๋ ์ค์๊ฐ์ผ๋ก ๊ฐฑ์ ๋๋ ์ฌ๋ฌผํจ์ ์ ๋ณด๋ฅผ ๋ณผ ์ ์๋ค.
-
์ฌ๋ฌผํจ ๊ฐ์ ์ค์
- ์ฒ์ server๊ฐ ์์๋๋ฉด, ์ํ๋ ์ฌ๋ฌผํจ์ ๊ฐ์๋ฅผ ๋์ ์ผ๋ก ํ ๋นํ ์ ์๋ค. (์ต๋ 50๊ฐ)
-
์ฌ๋ฌผํจ ์ ๋ณด ์ ์ฅ
- ๊ตฌ์กฐ์ฒด์ use, conn, lock, pw ๋ณ์๋ฅผ ์ฌ์ฉํ์๋ค.
- use : ํด๋น ์ฌ๋ฌผํจ์ด ์ฌ์ฉ ์ค์ธ์ง ํ์ธ
- 0 : ์ฌ์ฉX
- 1 : ์ฌ์ฉO
- conn : ํด๋น ์ฌ๋ฌผํจ์ ๋ค๋ฅธ client๊ฐ ์ฐ๊ฒฐ์ค์ธ์ง ํ์ธ
- 0 : ์ฐ๊ฒฐX
- 1 : ์ฐ๊ฒฐO
- lock : ํด๋น ์ฌ๋ฌผํจ์ด ์ ๊ฒจ์๋์ง ํ์ธ
- 0 : ์ ๊ธX
- 1 : ์ ๊ธO
- pw : ์ฌ๋ฌผํจ ๋น๋ฐ๋ฒํธ
-
๋น๋ฐ๋ฒํธ ์ค์ ์ ํ์ธ
- ์ฒ์ ๋น๋ฐ๋ฒํธ ์ค์ ์ 2๋ฒ ์ ๋ ฅ๋ฐ์ ์ ๋๋ก ์ค์ ํ๋์ง ํ์ธํ๋ค.
-
ํ ์ฌ๋ฌผํจ์ ์ฌ๋ฌ ์ฌ์ฉ์ ์ ๊ทผ ๋ถ๊ฐ
- ํ ์ฌ์ฉ์๊ฐ ์ฌ๋ฌผํจ์ ์ด์ฉํ๊ณ ์์ผ๋ฉด, ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ํด๋น ์ฌ๋ฌผํจ์ ์ด์ฉํ์ง ๋ชปํ๋ค.
- ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ํ ์ฌ๋ฌผํจ์ ๋์์ ์ ๊ทผํ์ฌ ์ ๋ณด๊ฐ ์ค๋ณต๋๋ ๊ฒ์ ๋ง๋๋ค.
-
๋น๋ฐ๋ฒํธ ์ ๋ ฅ ์ค๋ฅ ์ ๊ธ
- client๋ ๋ฌผ๊ฑด์ ์ฐพ์ ๋ ์ต๋ 5๋ฒ๊น์ง ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ ์ ์๋ค.
- ์ ๋ ฅํ ๋น๋ฐ๋ฒํธ๊ฐ 5๋ฒ ๋ชจ๋ ์ผ์นํ์ง ์๋๋ค๋ฉด 1๋ถ ๋์ ํด๋น ์ฌ๋ฌผํจ์ด ์ ๊ธฐ๊ณ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๋ค.
- ์ ๊ธด ์ฌ๋ฌผํจ์ ์ ๊ทผํ๋ฉด ๋จ์ ์๊ฐ์ด ์ถ๋ ฅ๋๋ค.
- final_server.c
gcc -o server final_server.c -lpthread D_REENTRANT
- final_client.c
gcc -o client final_client.c -lpthread D_REENTRANT