Python3 & 基于TCP的方式实现⽂件下载器功能
2021-02-03 本文已影响0人
乘风破浪的姐姐
文件下载器功能如下:
1、根据客户端发送的⽂件名,下载⽂件内容
2、⽂件下载完成,服务器端给予提示
3、若下载的⽂件不存在,则提示文件下载出错
客户端:
"""
客户端实现思路
1、导⼊模块
2、创建套接字
3、建⽴和服务器的连接
4、接收⽤户输⼊的⽂件名
5、发送⽂件名到服务器端
6、创建⽂件,准备接收服务端返回的⽂件数据
7、保存⽂件数据
8、关闭套接字
"""
# 1、导⼊模块
from socket import *
# 2、创建套接字
tcp_socket_client = socket(AF_INET,SOCK_STREAM)
# 3、建⽴和服务器的连接
tcp_socket_client.connect(("192.168.100.117",6666))
# 4、接收⽤户输⼊的⽂件名
file_name = input("请输入要下载的文件名:")
# 5、发送⽂件名到服务器端
tcp_socket_client.send(file_name.encode("gbk"))
# 6、创建⽂件,准备接收服务端返回的⽂件数据
with open("E:/"+file_name,"wb") as file:
# 7、保存⽂件数据
while True:
recv_data = tcp_socket_client.recv(1024)
if recv_data:
file.write(recv_data)
else:
break
# 8、关闭套接字
tcp_socket_client.close()
服务器:
"""
服务端书写思路
1、导⼊模块
2、创建套接字
3、绑定地址和端⼝
4、开始监听,设置套接字为被动监听模式
5、等待客户端连接(如果有新客户端连接,会创建新的套接字)
6、接收客户端发来的⽂件名
7、根据⽂件名读取⽂件数据
8、把读取的⽂件数据发送给客户端(循环)
9、关闭和客户端的连接
10、关闭服务器
"""
# 1、导⼊模块
from socket import *
# 2、创建套接字
tcp_socket_server = socket(AF_INET,SOCK_STREAM)
# 3、绑定地址和端⼝
tcp_socket_server.bind(('',6666))
# 4、开始监听,设置套接字为被动监听模式
tcp_socket_server.listen(128)
while True:
# 5、等待客户端连接(如果有新客户端连接,会创建新的套接字)
client_socket,ip_port = tcp_socket_server.accept()
# 6、接收客户端发来的⽂件名
recv_data = client_socket.recv(1024)
# 7、根据⽂件名读取⽂件数据
file_name = recv_data.decode("gbk")
# 8、把读取的⽂件数据发送给客户端(循环)
try:
with open(file_name,"rb") as file:
while True:
file_data = file.read(1024)
if file_data:
client_socket.send(file_data)
else:
break
except:
print("⽂件 %s 下载出错" % file_name)
else:
print("⽂件 %s 下载成功" % file_name)
# 9、关闭和客户端的连接
client_socket.close()
# 10、关闭服务器
tcp_socket_server.close()