ftp-client

 avatar
unknown
plain_text
5 months ago
2.5 kB
8
Indexable
import socket
import os

SERVER_HOST = '127.0.0.1'
SERVER_PORT = 2121
BUFFER_SIZE = 1024

def print_menu():
    print("\n=== FTP Client Menu ===")
    print("1. List files on server")
    print("2. Upload file to server")
    print("3. Download file from server")
    print("4. Quit")
    print("=======================\n")

def start_client():
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect((SERVER_HOST, SERVER_PORT))
    print("[CONNECTED] Connected to FTP server.")

    while True:
        print_menu()
        choice = input("Select an option (1-4): ").strip()

        if choice == '1':  # List files
            client_socket.send("LIST".encode())
            response = client_socket.recv(BUFFER_SIZE).decode()
            print("\nFiles on server:")
            print(response)

        elif choice == '2':  # Upload file
            filepath = input("Enter the path of the file to upload: ").strip()
            if os.path.exists(filepath):
                filename = os.path.basename(filepath)
                client_socket.send(f"UPLOAD {filename}".encode())
                with open(filepath, 'rb') as f:
                    while (data := f.read(BUFFER_SIZE)):
                        client_socket.send(data)
                client_socket.send(b'DONE')
                response = client_socket.recv(BUFFER_SIZE).decode()
                print(response)
            else:
                print("File not found. Please check the path.")

        elif choice == '3':  # Download file
            filename = input("Enter the name of the file to download: ").strip()
            client_socket.send(f"DOWNLOAD {filename}".encode())
            save_path = os.path.join("downloads", filename)
            with open(save_path, 'wb') as f:
                while True:
                    data = client_socket.recv(BUFFER_SIZE)
                    if data == b'DONE':
                        break
                    f.write(data)
            print(f"File {filename} downloaded to {save_path}.")

        elif choice == '4':  # Quit
            client_socket.send("QUIT".encode())
            response = client_socket.recv(BUFFER_SIZE).decode()
            print(response)
            break

        else:
            print("[ERROR] Invalid choice. Please try again.")

    client_socket.close()
    print("[DISCONNECTED] Client closed connection.")

if __name__ == "__main__":
    start_client()
Editor is loading...
Leave a Comment