[파이썬] socket 소켓을 통한 파일 전송
파일 전송은 네트워크 프로그래밍에서 가장 일반적인 작업 중 하나입니다. Python의 socket
모듈을 사용하면 손쉽게 파일을 전송할 수 있습니다. 이번 블로그 포스트에서는 socket
을 사용하여 파일을 전송하는 간단한 예제를 소개하겠습니다.
서버 측 코드
아래는 파일을 수신하는 서버 측 코드입니다. socket
모듈을 사용하여 서버를 생성하고 클라이언트의 연결을 수락합니다. 그런 다음, 클라이언트로부터 파일 데이터를 수신하고 로컬 파일에 저장합니다.
import socket
def save_file(file_path, client_socket):
with open(file_path, 'wb') as file:
while True:
data = client_socket.recv(1024)
if not data:
break
file.write(data)
def main():
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 8000))
server_socket.listen(1)
print('서버가 실행 중입니다.')
while True:
client_socket, addr = server_socket.accept()
print('클라이언트가 접속했습니다:', addr)
file_path = client_socket.recv(1024).decode()
print('수신할 파일:', file_path)
save_file(file_path, client_socket)
print('파일 수신 완료:', file_path)
client_socket.close()
if __name__ == '__main__':
main()
클라이언트 측 코드
아래는 파일을 송신하는 클라이언트 측 코드입니다. socket
모듈을 사용하여 서버에 연결하고 송신할 파일의 경로를 전송합니다. 그런 다음, 파일 데이터를 읽어서 서버로 전송합니다.
import socket
def send_file(file_path, server_socket):
with open(file_path, 'rb') as file:
while True:
data = file.read(1024)
if not data:
break
server_socket.sendall(data)
def main():
server_address = ('localhost', 8000)
file_path = input('전송할 파일 경로를 입력하세요: ')
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(server_address)
client_socket.sendall(file_path.encode())
send_file(file_path, client_socket)
print('파일 전송 완료:', file_path)
client_socket.close()
if __name__ == '__main__':
main()
실행 방법
- 먼저 서버를 실행하고 클라이언트를 실행합니다.
- 클라이언트에서 전송할 파일의 경로를 입력합니다.
- 클라이언트에서 전송을 시작하면 서버는 파일을 수신하고 저장합니다.
- 전송이 완료되면 클라이언트와 서버는 연결을 닫습니다.
결론
이번 블로그 포스트에서는 Python의 socket
모듈을 사용하여 파일을 전송하는 방법을 살펴보았습니다. 소켓을 사용하면 네트워크를 통해 파일을 송수신할 수 있으며, 이를 활용하여 다양한 네트워크 애플리케이션을 개발할 수 있습니다.