728x90
반응형
네트워크 통신을 위한 프로그래밍에서 소켓은 매우 중요한 개념입니다. Python에서 소켓 프로그래밍을 이용하면, TCP/IP 및 UDP를 포함한 다양한 방식의 네트워크 프로토콜을 통해 데이터를 송수신할 수 있습니다. 이 글에서는 Python의 socket 모듈을 사용한 기본적인 소켓 프로그래밍 방법을 알아보겠습니다.
소켓(Socket) 이해하기
소켓은 네트워크 통신의 끝점을 나타내는 추상화된 개념으로, 네트워크 상에서 서버와 클라이언트가 서로 정보를 주고받을 수 있게 해주는 인터페이스입니다. 소켓을 사용하여 데이터를 송수신하기 위해서는 IP 주소와 포트 번호가 필요합니다.
Python의 socket 모듈
Python의 socket 모듈은 BSD 소켓 인터페이스에 접근할 수 있는 기능을 제공합니다. 이 모듈을 사용하여 TCP 서버와 클라이언트를 간단히 구현할 수 있습니다.
TCP 서버 구현
- 소켓 생성: socket.socket() 함수를 사용하여 소켓 객체를 생성합니다.
- 주소 바인딩: 생성된 소켓에 서버의 주소(IP 및 포트)를 바인딩합니다.
- 연결 수신: 클라이언트로부터의 연결을 기다립니다.
- 데이터 송수신: 연결된 클라이언트와 데이터를 주고받습니다.
- 연결 종료: 통신이 끝나면 소켓을 닫습니다.
import socket
def start_server():
# 소켓 객체 생성
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 주소 바인딩
server_socket.bind(('localhost', 6789))
# 연결 수신 대기
server_socket.listen()
print("Server is listening on port 6789")
# 클라이언트 처리
while True:
client_socket, addr = server_socket.accept()
print(f"Connected by {addr}")
# 데이터 수신
data = client_socket.recv(1024)
print("Received:", data.decode())
# 데이터 송신
client_socket.sendall(b'Hello, client!')
# 연결 종료
client_socket.close()
if __name__ == '__main__':
start_server()
반응형
TCP 클라이언트 구현
- 소켓 생성: 서버와 마찬가지로 socket.socket() 함수를 사용합니다.
- 서버 연결: 서버의 IP 주소와 포트 번호를 사용하여 연결을 시도합니다.
- 데이터 송수신: 서버와 데이터를 주고받습니다.
- 연결 종료: 작업이 완료되면 소켓을 닫습니다.
import socket
def start_client():
# 소켓 생성
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 서버에 연결
client_socket.connect(('localhost', 6789))
# 데이터 송신
client_socket.sendall(b'Hello, server!')
# 데이터 수신
data = client_socket.recv(1024)
print("Received:", data.decode())
# 소켓 닫기
client_socket.close()
if __name__ == '__main__':
start_client()
결론
Python의 socket 모듈을 사용한 소켓 프로그래밍은 서버와 클라이언트 간의 네트워크 통신을 구현하는 기본적인 방법입니다. 이 모듈을 통해 개발자는 네트워크 애플리케이션을 비교적 쉽게 개발할 수 있으며, TCP 및 UDP 통신을 자유롭게 구현할 수 있습니다. 이러한 기초를 바탕으로 더 복잡한 네트워크 기반 애플리케이션 개발에 도전해보세요.
728x90
반응형
'Python' 카테고리의 다른 글
Python 웹 스크래핑 기초: 데이터 수집을 위한 첫걸음 (33) | 2024.05.17 |
---|---|
Python에서 데이터베이스 연동하기: SQLite와 MySQL 사용법 (30) | 2024.05.17 |
Python에서 쓰레드와 멀티프로세스 이해하기: 병렬 처리의 기초 (27) | 2024.05.16 |
Python 람다 함수 활용하기: 간결한 함수 표현의 힘 (25) | 2024.05.15 |
Python에서 함수형 프로그래밍 이해하기 (20) | 2024.05.15 |