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()
上一篇 下一篇

猜你喜欢

热点阅读