[python] 소켓 프로그래밍을 이용한 파일 공유 프로그램 개발

파일을 공유하고 전송할 수 있는 간단한 파일 공유 프로그램을 Python 언어와 소켓 프로그래밍을 이용하여 개발해보겠습니다.

1. 소켓 프로그래밍 소개

소켓은 네트워크 통신을 가능하게 하는 엔드포인트입니다. 소켓 프로그래밍은 네트워크를 통해 데이터를 주고받는 응용프로그램을 개발하는 기술입니다.

2. 프로그램 구현

필요한 라이브러리 가져오기

import socket
import tqdm
import os

서버 구현

SERVER_HOST = "0.0.0.0"
SERVER_PORT = 5001
BUFFER_SIZE = 1024
SEPARATOR = "<SEPARATOR>"

s = socket.socket()

s.bind((SERVER_HOST, SERVER_PORT))

s.listen(5)
print(f"[*] Listening as {SERVER_HOST}:{SERVER_PORT}")

client_socket, address = s.accept() 
print(f"[+] {address} is connected.")

received = client_socket.recv(BUFFER_SIZE).decode()
filename, filesize = received.split(SEPARATOR)

filename = os.path.basename(filename)

filesize = int(filesize)

progress = tqdm.tqdm(range(filesize), f"Receiving {filename}", unit="B", unit_scale=True, unit_divisor=1024)

with open(filename, "wb") as f:
    for _ in progress:
        bytes_read = client_socket.recv(BUFFER_SIZE)
        if not bytes_read:
            break
        f.write(bytes_read)
        progress.update(len(bytes_read))

client_socket.close()
s.close()

클라이언트 구현

SEPARATOR = "<SEPARATOR>"
BUFFER_SIZE = 1024
filename = "test.txt"
filesize = os.path.getsize(filename)

s = socket.socket()

s.connect(("192.168.0.100", 5001))

s.send(f"{filename}{SEPARATOR}{filesize}".encode())

progress = tqdm.tqdm(range(filesize), f"Sending {filename}", unit="B", unit_scale=True, unit_divisor=1024)

with open(filename, "rb") as f:
    for _ in progress:
        bytes_read = f.read(BUFFER_SIZE)
        if not bytes_read:
            break
        s.sendall(bytes_read)
        progress.update(len(bytes_read))

s.close()

3. 실행

서버 실행

서버 스크립트를 실행하여 클라이언트의 파일 전송 요청을 기다립니다.

클라이언트 실행

클라이언트 스크립트를 실행하여 서버에 파일을 전송합니다.

4. 마무리

이렇게하면 소켓 프로그래밍을 이용하여 간단한 파일 공유 프로그램을 만들 수 있습니다. 이 프로그램을 확장하여 보안 기능을 추가하거나 사용자 인터페이스를 개선하는 등 다양한 개선 사항을 적용할 수 있습니다.

더 많은 세부사항과 더 많은 기능을 위해서는 공식 자료를 참조하시기 바랍니다.