用python写一个FTP服务

import socket
import os

# 设置FTP服务器的IP地址和端口号
HOST = '127.0.0.1'
PORT = 28

# 创建一个socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定IP地址和端口号
server_socket.bind((HOST, PORT))

# 开始监听
server_socket.listen(5)

print('FTP server started on {}:{}'.format(HOST, PORT))

while True:
    # 等待客户端连接
    client_socket, client_address = server_socket.accept()
    print('Client connected:', client_address)

    # 发送欢迎消息
    client_socket.send(b'220 Welcome to FTP server\r\n')

    while True:
        # 接收客户端发送的命令
        command = client_socket.recv(1024).decode().strip()
        print('Command received:', command)

        # 处理客户端发送的命令
        if command.startswith('USER'):
            client_socket.send(b'331 Password required for user.\r\n')
        elif command.startswith('PASS'):
            client_socket.send(b'230 User logged in.\r\n')
        elif command.startswith('QUIT'):
            client_socket.send(b'221 Goodbye.\r\n')
            client_socket.close()
            break
        elif command.startswith('LIST'):
            # 列出当前目录下的文件列表
            file_list = os.listdir('.')
            response = ' '.join(file_list)
            client_socket.send(response.encode() + b'\r\n')
        elif command.startswith('RETR'):
            # 下载文件
            filename = command.split(' ')[1]
            if os.path.isfile(filename):
                with open(filename, 'rb') as f:
                    data = f.read()
                    client_socket.send(data)
            else:
                client_socket.send(b'550 File not found.\r\n')
        elif command.startswith('STOR'):
            # 上传文件
            filename = command.split(' ')[1]
            with open(filename, 'wb') as f:
                data = client_socket.recv(1024)
                while data:
                    f.write(data)
                    data = client_socket.recv(1024)
            client_socket.send(b'226 Transfer complete.\r\n')
        else:
            client_socket.send(b'500 Syntax error, command unrecognized.\r\n')

你可能感兴趣的:(网络,服务器,运维)