์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- ํ์ด์ฌ ๋จธ์ ๋ฌ๋ ์๋ฒฝ ๊ฐ์ด๋
- ๋ฏธ์ธ๋จผ์ง
- ํ๊ท๋ถ์
- ์คํ๋ฅดํ์ฝ๋ฉ
- ์ค๋ธ์
- ์คํ๊ท๋ชจํ
- ๋ด์ผ๋ฐฐ์
- ์คํ๋ฅดํ ์ฝ๋ฉ
- R
- ํ๋ก์ ํธ
- harkerrank
- ํ์ด์ฌ ์ฒ ์ ์ ๋ฌธ
- ์น ์คํฌ๋ฉํ
- SQL
- ์คํ๋ฅดํ
- ๋ด์ผ๋ฐฐ์์นด๋
- ์ค์ ๋ฐ์ดํฐ ๋ถ์ ํ๋ก์ ํธ
- TiL
- ํ์ด์ฌ
- MySQL
- ํ๋ก๊ทธ๋๋จธ์ค
- ํ ์คํธ ๋ถ์
- wil
- ๋ด์ผ๋ฐฐ์์บ ํ
- hackerrank
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ํ์ด์ฌ ๋จธ์ ๋ฌ๋ ์๋ฒฝ๊ฐ์ด๋
- ํ์ด์ฌ ์ฒ ์ ์ ๋ฌธ
- ํ์ด์ฌ ์๋ฒฝ ๊ฐ์ด๋
- Cluster
- Today
- Total
OkBublewrap
2025-04-27 TIL (socket, ๋ถ์คํฐ๋) ๋ณธ๋ฌธ
๐ 2025-04-27 | TIL (Today I Learned)
๐ ํ๋ฃจ ์์ฝ
- ์ง์์ผ
- socket
- ๋ฐ๋ฐ๋ผ๋ฏผํ ๋ถ์คํฐ๋
โก๏ธ ํ๊ณ
socket(low-level)
์์ผ์ด๋ ์ํํธ์จ์ด๋ก ์์ฑ๋ ๋ค๋ฅธ ์ปดํจํฐ์ ๋คํธ์ํฌ๋ฅผ ํ ์ป ๋ฐ์ดํฐ๋ฅผ ์ก์์ ํ๊ธฐ ์ํ ์ฐฝ๊ตฌ ์ญํ ์ ํต์ ์ ์์ ์ ๋๋ค.
ํฌํธ๋ ๋คํธ์ํฌ ์์์ ํต์ ํ๊ธฐ ์ํด์ ํธ์คํธ ๋ด๋ถ์ ์ผ๋ก ํ๋ก์ธ์ค๊ฐ ํ ๋น๋ฐ์์ผ ํ๋ ๊ณ ์ ํ ์ซ์์ ๋๋ค.
ํ๋์ ์์ผ์ ์ฌ๋ฌ๊ฐ์ ํฌํธ๋ฅผ ํ ๋น ๋ฐ์ ์ ์์ต๋๋ค.
[ํด๋ผ์ด์ธํธ] [์๋ฒ]
์์ผ ์์ฑ ์์ผ ์์ฑ
→ connect() -----> bind() + listen()
→ accept()
send("์๋
!") -----> recv()
# ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
# ์ ์ํ ์๋ฒ ์ฃผ์, localhost
HOST = '127.0.0.1'
PORT = 9999
# ์์ผ ๊ฐ์ฒด ์์ฑ
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# socket.AF_INET: IPv4
# socket.SOCK_STREAM: ์์ผ ํ์
์ผ๋ก TCP
# ํฌํธ ์ค์
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# ์๋ฒ๋ฅผ ๊ป๋ค ์ผ๋ ๋ฐ๋ก ์คํํ ์ ์๊ฒ ํ๋ ์ต์
# 0: ๋, 1: ํด
# socket.SO_REUSEADDR: ํฌํธ ์ฌ์ฌ์ฉ
# socket.SOL_SOCKET: ์์ผ ๋ ๋ฒจ ์ค์
# ์๋ฒ ํด๋ผ์ด์ธํธ ์ ์ ํ์ฉ
server_socekt.listen()
print('์๋ฒ๊ฐ ์คํ๋์์ต๋๋ค.')
# accept ํจ์์์ ๋๊ธฐํ๋ค๊ฐ ํด๋ผ์ด์ธํธ๊ฐ ์ ์ํ๋ฉด ์๋ก์ด ์์ผ์ ๋ฆฌํด
client_socket, addr = server_socekt.accpet()
print('์ ์ํ ํด๋ผ์ด์ธํธ ์ฃผ์์
๋๋ค.')
print('connected by', addr)
# addr: ์ ์ ๋ฃจํธ
while True:
data = client_socket.recv(1024)
# recv(1024): ๋ฌธ์์ด 1024๋ฐ์ดํธ ์ ํ
if not data:
break
# ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํด์ ์ถ๋ ฅ
print('Received From', addr, data.decode())
# ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ํด๋ผ์ด์ธํธ ํํ
๋ณด๋ด๊ธฐ
client_socket.sendall(data)
client_socket.close()
server_socekt.close()
select
์์ socket๋ง ์ฌ์ฉํ ์๋ฒ ํต์ ์ ํด๋ผ์ด์ธํธ ์์ผ ์๋ฒ์ ์ ์ํ์ฌ ์ ์์ ์ข ๋ฃํ๋ฉด ์๋ฒ ์ญ์ ์ข ๋ฃ๋๋ค. ์์ผ ์๋ฒ๊ฐ ์ฌ๋ฌ ํด๋ผ์ด์ธํธ์ ๋์์ ์ ์ํ ์ ์๋ค.
select๋ ์์ผ ํ๋ก๊ทธ๋๋ฐ์์ ํ๋์ ์ ์ก๋ก๋ ์ฌ๋ฌ ์ข ๋ฅ์ ๋ฐ์ดํฐ๋ฅผ ์ก์์ ํ๊ฒ ํด์ฃผ๋ ๋ชจ๋
ํ๊ฐ์ ํ๋ก์ธ์ค๋ก ๋ ๊ฐ ์ด์์ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์๋ฏธํ๋ I/O ๋ฉํฐ ํ๋ ์ฑ์ ๊ฐ๋ฅ
select๋ ์์ผ์์ ์ถ๋ ฅ๋๋ read, write, except ๋ฆฌ์คํธ๋ฅผ ์ธ์๋ก ์ฌ์ฉ
์ค๋ ๋ฐฐ์ด ํต์ฌ ์ฃผ์
์์ผ ํต์ ์ ๊ธฐ๋ณธ ํ๋ฆ๊ณผ ์ฌ์ฉ๋ฒ(TCP ์๋ฒ-ํด๋ผ์ด์ธํธ)
๊ฐ๋ ์์ฝ
- socket.socket(AF_INET, SOCK_STREAM): TCP ์์ผ ์์ฑ
- bind(), listen(), accept(): ์๋ฒ ์ค๋น ๋จ๊ณ
- bind(): ๋ด ์์ผ์ด ์ฌ์ฉํ IP ์ฃผ์์ ํฌํธ ๋ฒํธ๋ฅผ ์ง์ ํด์ฃผ๋ ํจ์์ด๋ค.
- listen(): ๋๊ธฐํ๋ ์ํ๋ก ์ ํ
- accpet(): ์ค์ ๋ก ํด๋ผ์ด์ธํธ ์ ์ ์๋ฝ
- select(): ์ฌ๋ฌ ํด๋ผ์ด์ธํธ๋ฅผ ๋์์ ์ฒ๋ฆฌํ๊ธฐ
- read: ์ฝ์ ์ค๋น๋ ์์ผ
- write: ์ธ ์ค๋น๋ ์์ผ
- except: ์๋ฌ๋ ์์ผ
[์์ผ1] (์์ง ๋ฐ์ดํฐ ์์)
[์์ผ2] (๋ฐ์ดํฐ ๋์ฐฉ!)
[์์ผ3] (์์ง ์์)
select(read_list=[์์ผ1, ์์ผ2, ์์ผ3]) ํธ์ถ
→ ๊ฒฐ๊ณผ: [์์ผ2]๋ง ๋ฆฌํด
- SO_REUSEADDR: ํฌํธ ์ฌ์ฌ์ฉ ํ์ฉ ์ต์
๋๋์
๊ฐ๋จํ ์๋ฒ, ํด๋ผ์ด์ธํธ ์์ผ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ๋ค.
select()์ ํ์ฉํ๋ฉด ๋ค์ค ํด๋ผ์ด์ธํธ ์ฒ๋ฆฌ๊ฐ ํจ์ฌ ํจ์จ์ ์ด๋ค.
SO_REUSEADDR ์ค์ ์ ์๋ฒ ๊ฐ๋ฐํ ๋ ๊ฑฐ์ ํ์๋ค.
โ๏ธ To-Do
2025.04.28 ํ ์ผ
- pass by pass ๊ณผ์ ์ ์ถ
- ๊ฐ์ 1๊ฐ ๋ฃ๊ธฐ
- ๋ฉด์ ์คํฐ๋
- ๋ถ ์คํฐ๋
'Today I Learning' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2025-04-29 TIL (์ผ๊ธฐ) (0) | 2025.04.30 |
---|---|
2025-04-28 TIL (Python ์ด๋ฉ์ผ ์ก/์์ ) (0) | 2025.04.28 |
2025-04-23 TIL (gensim) (0) | 2025.04.23 |
2025-04-15 TIL (์ผ๊ธฐ) (0) | 2025.04.16 |
2025-04-14 TIL (๋ฉด์ ์ค๋น) (2) | 2025.04.15 |