네트워크 프로그래밍은 데이터 교환을 위해 서로 다른 네트워크에 있는 기기들 사이의 통신을 가능하게 합니다. Python은 소켓 프로그래밍을 통해 저수준 네트워킹 지원을 제공합니다. 이 글에서는 Python의 socket
모듈을 사용하여 기본적인 네트워크 통신을 구현하는 방법을 소개합니다.
Python 소켓 모듈 소개
Python의 socket
모듈은 BSD 소켓 인터페이스에 대한 액세스를 제공합니다. 이 모듈을 사용하여 클라이언트와 서버 간의 TCP/IP 및 UDP 연결을 설정할 수 있습니다.
소켓 생성
1
2
3
|
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
cs |
socket.AF_INET
은 IPv4를 사용하며, socket.SOCK_STREAM
은 TCP 연결을 의미합니다.
서버 소켓 바인딩 및 리스닝
1
2
3
4
|
host = ‘localhost’
port = 12345
s.bind((host, port))
s.listen(5)
|
cs |
서버는 특정 호스트와 포트에 바인드되어 연결을 기다립니다.
클라이언트 연결 수락
1
2
|
conn, addr = s.accept()
print(f‘Connected by {addr}’)
|
cs |
서버는 클라이언트의 연결을 수락합니다.
*실전 예제
간단한 에코 서버와 클라이언트
서버 코드:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import socket
def echo_server(host = ‘localhost’, port = 12345):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((host, port))
s.listen(5)
conn, addr = s.accept()
with conn:
print(f‘Connected by {addr}’)
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
if __name__ == ‘__main__’:
echo_server()
|
cs |
클라이언트 코드:
1
2
3
4
5
6
7
8
9
10
11
|
import socket
def echo_client(host = ‘localhost’, port = 12345):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((host, port))
s.sendall(b‘Hello, world’)
data = s.recv(1024)
print(f‘Received {data.decode()}’)
if __name__ == ‘__main__’:
echo_client()
|
cs |
고급 주제: 멀티스레딩 에코 서버
네트워크 프로그래밍의 고급 주제로, 동시에 여러 클라이언트를 처리하기 위해 멀티스레딩을 사용하는 방법을 소개합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import threading
import socket
def handle_client(conn, addr):
print(f‘Connected by {addr}’)
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
conn.close()
def threaded_echo_server(host = ‘localhost’, port = 12345):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((host, port))
s.listen(5)
while True:
conn, addr = s.accept()
thread = threading.Thread(target=handle_client, args=(conn, addr))
thread.start()
if __name__ == ‘__main__’:
threaded_echo_server()
|
cs |
Python을 사용한 소켓 프로그래밍은 네트워크 애플리케이션 개발의 기초입니다. 여기서 소개한 기본 개념과 코드 예제를 통해 자신만의 네트워크 프로그램을 시작할 수 있습니다.