고양이 여름이의 지식채널
[Python] 파이썬 네트워크 프로그래밍-소켓 (TCP/IP, UDP) 본문
파이썬은 네트워크 프로그래밍을 위한 표준 라이브러리인 socket 모듈을 제공합니다. socket 모듈은 TCP/IP, UDP 등의 프로토콜을 지원하며, 서버와 클라이언트 모두 구현할 수 있습니다.
소켓(Socket)
소켓(Socket)은 서버와 클라이언트 사이에서 통신을 할 때 사용하는 엔드포인트(Endpoint)입니다. 일반적으로 IP 주소와 포트 번호를 결합한 형태로 식별됩니다. IP 주소는 컴퓨터의 고유한 주소이며, 포트 번호는 프로그램이 통신하는 논리적인 주소입니다.
TCP/IP와 UDP
TCP/IP와 UDP는 네트워크 프로그래밍을 위해 가장 많이 사용되는 프로토콜입니다. TCP/IP는 전송 제어 프로토콜/인터넷 프로토콜(Transmission Control Protocol/Internet Protocol)의 약자로, 안정적인 데이터 전송을 보장합니다. UDP는 사용자 데이터그램 프로토콜(User Datagram Protocol)의 약자로, 데이터 전송 속도를 높이기 위해 안정성을 포기한 프로토콜입니다.
- TCP 구현코드
import socket
HOST = 'localhost'
PORT = 9999
# 소켓 생성
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 서버 바인딩
server_socket.bind((HOST, PORT))
# 클라이언트 대기
server_socket.listen()
print('Server is running on %s:%d' % (HOST, PORT))
while True:
# 클라이언트 연결 대기
client_socket, addr = server_socket.accept()
print('Connected by', addr)
# 데이터 수신
data = client_socket.recv(1024)
print('Received from', addr, ':', data.decode())
# 데이터 송신
message = 'Hello, client!'
client_socket.sendall(message.encode())
# 클라이언트 소켓 종료
client_socket.close()
-accept() 메서드는 클라이언트와 서버 간의 연결을 수립하고, 클라이언트와 연결된 소켓과 클라이언트의 주소를 반환합니다. 또한 클라이언트와의 연결이 종료되면 소켓도 함께 종료해야 하므로 close() 메서드를 사용합니다.
- UDP 구현코드
import socket
//IP 주소와 포트 번호 설정
HOST = "127.0.0.1"
UDP_PORT = 5005
//소켓 객체 생성
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((HOST, UDP_PORT))
while True:
//데이터 수신
data, addr = sock.recvfrom(1024)
print("received message:", data)
-UDP는 TCP보다 연결 설정 과정이 없기 때문에 구현이 간단하다는 장점이 있습니다.
파일 전송을 위한 클라이언트와 서버의 구현 코드
- 서버
import socket
# 서버의 주소와 포트 번호
HOST = '127.0.0.1'
PORT = 8000
# UDP 소켓 생성
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 서버 소켓에 주소와 포트 번호 할당
server_socket.bind((HOST, PORT))
# 파일 요청 대기
filename, client_address = server_socket.recvfrom(1024)
# 파일 데이터 읽기
with open(filename.decode(), 'rb') as f:
data = f.read(1024)
while data:
# 클라이언트에게 파일 데이터 전송
server_socket.sendto(data, client_address)
data = f.read(1024)
# 소켓 종료
server_socket.close()
- 클라이언트
import socket
# 서버의 주소와 포트 번호
HOST = '127.0.0.1'
PORT = 8000
# 서버에게 요청할 파일 이름
filename = 'example.txt'
# TCP 소켓 생성
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 서버에 연결
client_socket.connect((HOST, PORT))
# 파일 요청 메시지 전송
client_socket.sendall(filename.encode())
# 서버로부터 파일 데이터 수신
data = client_socket.recv(1024)
# 파일 저장
with open(filename, 'wb') as f:
while data:
f.write(data)
data = client_socket.recv(1024)
# 소켓 종료
client_socket.close()
[Python] 파이썬 모듈, 패키지 설명과 사용법
파이썬은 다양한 모듈과 패키지를 지원하여 프로그램을 구성하는 데 유용하게 활용됩니다. 이번 포스팅에서는 파이썬의 모듈과 패키지에 대해 알아보겠습니다. 모듈(Module) 모듈은 파이썬 파일(
summer-cat93.tistory.com