소켓을 이용한 네트워킹

네트워크 프로그래밍은 데이터 교환을 위해 서로 다른 네트워크에 있는 기기들 사이의 통신을 가능하게 합니다. Python은 소켓 프로그래밍을 통해 저수준 네트워킹 지원을 제공합니다. 이 글에서는 Python의 socket 모듈을 사용하여 기본적인 네트워크 통신을 구현하는 방법을 소개합니다.

Python 소켓 모듈 소개

Python의 socket 모듈은 BSD 소켓 인터페이스에 대한 액세스를 제공합니다. 이 모듈을 사용하여 클라이언트와 서버 간의 TCP/IP 및 UDP 연결을 설정할 수 있습니다.

소켓 생성

1
2
3
import socket
= 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을 사용한 소켓 프로그래밍은 네트워크 애플리케이션 개발의 기초입니다. 여기서 소개한 기본 개념과 코드 예제를 통해 자신만의 네트워크 프로그램을 시작할 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다