几十行代码写一个简单的文件下载器
服务器代码:
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()