服务器代码:
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()