Skip to content

Latest commit

ย 

History

History
107 lines (79 loc) ยท 4.25 KB

File metadata and controls

107 lines (79 loc) ยท 4.25 KB

NetworkPrograming

๐ŸŽจ ์‹ค์‹œ๊ฐ„ ๊ทธ๋ฆผ ํ€ด์ฆˆ ๊ฒŒ์ž„

๋ฒ„์ „: 1.0
์ž‘์„ฑ์ผ: 2025๋…„ 6์›” 16์ผ


1. ๐Ÿ“Œ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” TCP/IP ์†Œ์ผ“ ํ†ต์‹  ๊ธฐ๋ฐ˜์˜ ๋‹ค์ค‘ ์‚ฌ์šฉ์ž ์‹ค์‹œ๊ฐ„ ๊ทธ๋ฆผ ํ€ด์ฆˆ ๊ฒŒ์ž„์ž…๋‹ˆ๋‹ค.
์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋Š” C์–ธ์–ด๋กœ ๊ฐ๊ฐ ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉฐ, ํด๋ผ์ด์–ธํŠธ๋Š” SDL2 ๊ทธ๋ž˜ํ”ฝ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ์ง๊ด€์ ์ธ GUI๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์ด ํ”„๋กœ์ ํŠธ๋Š” ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ, ์ปค์Šคํ…€ ํ”„๋กœํ† ์ฝœ ์„ค๊ณ„๋ฅผ ์‹ค์Šตํ•˜๋Š” ๋ฐ ๋ชฉ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.


2. ๐Ÿง  ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

๐Ÿ”น ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜: select() ๊ธฐ๋ฐ˜ I/O ๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑ

  • ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋กœ ์ˆ˜๋งŽ์€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ฐ์‹œ ๋ฐ ์ฒ˜๋ฆฌ
  • select() ์‹œ์Šคํ…œ ์ฝœ๋กœ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์†Œ์ผ“๋งŒ ์ฒ˜๋ฆฌ
  • ์Šค๋ ˆ๋“œ/ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‚จ๋ฐœํ•˜์ง€ ์•Š๊ธฐ์— ์ž์› ์†Œ๋น„๊ฐ€ ์ ๊ณ  ์•ˆ์ •์ 

๐Ÿ”น ํด๋ผ์ด์–ธํŠธ ์•„ํ‚คํ…์ฒ˜: pthread ๊ธฐ๋ฐ˜ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ

  • ๋ฉ”์ธ ์Šค๋ ˆ๋“œ: SDL UI ๋ Œ๋”๋ง ๋ฐ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์ฒ˜๋ฆฌ
  • ์ˆ˜์‹  ์Šค๋ ˆ๋“œ: ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฉ”์‹œ์ง€ ์ˆ˜์‹  (UI ๋ธ”๋กœํ‚น ๋ฐฉ์ง€)

3. โš™๏ธ ๋นŒ๋“œ ๋ฐ ์‹คํ–‰ ๋ฐฉ๋ฒ•

3.1. ์š”๊ตฌ ์‚ฌํ•ญ

  • OS: Linux (Ubuntu, CentOS ๋“ฑ)
  • ์ปดํŒŒ์ผ๋Ÿฌ: gcc
  • ํ•„์ˆ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: pthreads, libsdl2-dev, libsdl2-ttf-dev
sudo apt-get update
sudo apt-get install build-essential libsdl2-dev libsdl2-ttf-dev

## 4. ๐ŸŽฎ ์ฃผ์š” ๊ธฐ๋Šฅ ์„ค๋ช…

### 4.1. โœ… ๋‹ค์ค‘ ํด๋ผ์ด์–ธํŠธ & ์•ˆ์ •์„ฑ
- ์ตœ๋Œ€ `FD_SETSIZE` (๊ธฐ๋ณธ 1024๋ช…)๊นŒ์ง€ ์ด๋ก ์ ์œผ๋กœ ๋™์‹œ ์ ‘์† ์ง€์›
- ํด๋ผ์ด์–ธํŠธ์˜ ๋น„์ •์ƒ ์ข…๋ฃŒ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , ์†Œ์ผ“ ๋ฐ ์ƒํƒœ ์ •๋ฆฌ๋ฅผ ์ž๋™ ์ˆ˜ํ–‰
- TCP์˜ ์ŠคํŠธ๋ฆผ ํŠน์„ฑ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœํ–‰ ๋ฌธ์ž(`\n`) ๊ธฐ์ค€์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” **๋ฉ”์‹œ์ง€ ํ”„๋ ˆ์ด๋ฐ(Message Framing)** ๋กœ์ง ๊ตฌํ˜„

### 4.2. ๐Ÿ  ๋ฐฉ ๊ธฐ๋ฐ˜ ๊ฒŒ์ž„ ๊ด€๋ฆฌ
- ๋ช…๋ น์–ด `/create`, `/join`, `/roomlist`, `/exit` ๋“ฑ์„ ํ†ตํ•ด ๋ฐฉ ์ƒ์„ฑ ๋ฐ ์ž…์žฅ
- ์„œ๋ฒ„๋Š” ๊ฐ ๋ฐฉ์˜ ๊ณ ์œ  ์ƒํƒœ(์œ ์ € ๋ชฉ๋ก, ์ •๋‹ต, ์ถœ์ œ์ž ๋“ฑ)๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌ

### 4.3. ๐ŸŽฏ ์ถœ์ œ์ž ๊ฒ€์ฆ ๋ฐ ํ„ด ์ œ์–ด
- `drawer_sock` ๊ฐ’์œผ๋กœ ์ถœ์ œ์ž ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จ
- `DRAW_`, `SET_ANSWER` ๋ช…๋ น์€ ์ถœ์ œ์ž์ธ์ง€ ํ™•์ธ ํ›„์—๋งŒ ์ฒ˜๋ฆฌ
- ์ถœ์ œ์ž ์™ธ ์‚ฌ์šฉ์ž์˜ ๋ฌด๋‹จ ์ž…๋ ฅ ๋ฐฉ์ง€

### 4.4. โฐ ์ œํ•œ ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜ ๋ผ์šด๋“œ
- ๊ฐ ๋ผ์šด๋“œ๋Š” ๊ธฐ๋ณธ 60์ดˆ๋กœ ์ œํ•œ
- ์‹œ๊ฐ„์ด ๋งŒ๋ฃŒ๋˜๋ฉด ์ •๋‹ต ๊ณต๊ฐœ ํ›„, ๋‹ค์Œ ์ถœ์ œ์ž๋กœ ํ„ด ์ž๋™ ์ „ํ™˜

### 4.5. ๐Ÿ“š ๋ฌธ์ œ์€ํ–‰ ๋ฐ ์ •๋‹ต ์ฒ˜๋ฆฌ
- `word_list`๋ฅผ ํ†ตํ•ด ์ค‘๋ณต ์—†๋Š” ๋‹จ์–ด ์ถœ์ œ
- ์ •๋‹ต์ž๊ฐ€ ๋“ฑ์žฅํ•˜๋ฉด ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋‹ค์Œ ์ถœ์ œ์ž๋กœ ์ž๋™ ์ง€์ •

---

## 5. ๐Ÿ’ฌ ์‚ฌ์šฉ์ž ๋ช…๋ น์–ด ์š”์•ฝ

| ๋ช…๋ น์–ด    | ์ธ์ž       | ์„ค๋ช…                                       |
|-----------|------------|----------------------------------------|
| `/nick`   | `<๋‹‰๋„ค์ž„>` | ๋‹‰๋„ค์ž„ ์„ค์ •                                |
| `/create` | `<๋ฐฉ์ด๋ฆ„>` | ๋ฐฉ ์ƒ์„ฑ ํ›„ ์ž…์žฅ                             |
| `/join`   | `<๋ฐฉID>`   | ์ง€์ •๋œ ๋ฐฉ์— ์ž…์žฅ                           |
| `/roomlist` | ์—†์Œ     | ํ˜„์žฌ ์ƒ์„ฑ๋œ ๋ฐฉ ๋ชฉ๋ก ์กฐํšŒ                     |
| `/exit`   | ์—†์Œ       | ํ˜„์žฌ ์ฐธ์—ฌ ์ค‘์ธ ๋ฐฉ์—์„œ ๋‚˜๊ฐ€๊ธฐ                  |
| `/answer` | `<๋‹จ์–ด>`   | (์ถœ์ œ์ž ์ „์šฉ) ํ˜„์žฌ ๋ผ์šด๋“œ์˜ ์ •๋‹ต ๋‹จ์–ด ์„ค์ •       |
| `/guess`  | `<๋‹จ์–ด>`   | (์ฐธ๊ฐ€์ž ์ „์šฉ) ์ •๋‹ต ์ถ”์ธก                     |
| `/quit`   | ์—†์Œ       | ํด๋ผ์ด์–ธํŠธ ์ข…๋ฃŒ                            |
| *(์—†์Œ)*  | `<๋ฉ”์‹œ์ง€>` | ํ˜„์žฌ ๋ฐฉ ์ฐธ์—ฌ์ž์—๊ฒŒ ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€ ์ „์†ก              |
------------------------------------------------------------------


## 6. ๐Ÿ›ฐ๏ธ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ ๋ช…์„ธ

### ๐Ÿ“ค ํด๋ผ์ด์–ธํŠธ โ†’ ์„œ๋ฒ„

NICK:<nickname>
CREATE_ROOM:<room_name>
JOIN_ROOM:<room_id>
LIST_ROOMS
EXIT_ROOM
SET_ANSWER:<word>
GUESS:<word>
DRAW_POINT:<x>,<y>,<color_idx>,<size>
DRAW_LINE:<x1>,<y1>,<x2>,<y2>,<color_idx>,<size>
DRAW_CLEAR
MSG:<chat_message>
QUIT

### ๐Ÿ“ฅ ์„œ๋ฒ„ โ†’ ํด๋ผ์ด์–ธํŠธ

SMSG:<server_message> // ์‹œ์Šคํ…œ ๋ฉ”์‹œ์ง€
ROOM_EVENT:<event_message> // ๋ฐฉ ๋‚ด ์ด๋ฒคํŠธ (์ž…์žฅ, ํ‡ด์žฅ ๋“ฑ)
MSG:[nickname] <chat_message> // ์ผ๋ฐ˜ ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€
TURN_CHANGED:<drawer_nickname> // ์ถœ์ œ์ž ๋ณ€๊ฒฝ ์•Œ๋ฆผ
DRAW_POINT:... / DRAW_LINE:... // ๊ทธ๋ฆผํŒ ๊ทธ๋ฆฌ๊ธฐ ๋ฐ์ดํ„ฐ