服务器代码:

import socket
import os


def main():
    # 创建socket
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 绑定本地信息
    server_socket.bind(('192.168.1.115', 8080))
    # 将套接字由主动变为被动
    server_socket.listen(128)

    # 等待客端连接
    new_client_socket = server_socket.accept()
    
    # 接收用户需要下载的文件名
    recv_file_name = new_client_socket.recv(1024).decode()
    
    # 判断当前路径下是否存在该文件
    if recv_file_name in os.listdir("."):
        # 以二进制的格式读取文件
        with open(recv_file_name, 'rb') as f:
            data = f.read()
        # 将文件发给客户端
        new_client_socket.send(data)

    # 关闭套接字
    new_client_socket.close()
    server_socket.close()

if __name__ == '__main__':
    main()

客户端代码:

import socket

# 创建socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接服务器
server_addr = ('192.168.1.115', 8080)
client_socket.connect(server_addr)
print("连接成功")

# 输入要下载的文件名
file_name = input("请输入要下载的文件名:")

# 发送文件下载请求
client_socket.send(file_name.encode("utf-8"))

# 接受服务器发送过来的数据,最大接受1024字节
recv_data = client_socket.recv(1024*1024)

# 如果接受到的数据再创建文件,否则不创建
if recv_data:
    print("success")
    print(recv_data)
    with open("[new]"+file_name, "wb") as f:
        f.write(recv_data)
else:
    print("failed")
# 关闭套接字
client_socket.close()