python实现简单的tcp 文件下载


Posted in Python onSeptember 16, 2020

什么是下载?

首先客户端会问服务器,有没有一个xxx的文件啊?服务器开始寻找,找到后对客户端说有,然后客户端在本地新建一个文件,客户端从服务器收到一点数据,就写进这个文件中,再收到一点数据,再写入这个文件中,只要把所有的接收到的数据都写入到这个文件中,就完成了下载的操作。

所以下载需要2个部分。服务器的发送方和客户端的接收方。

我们这里不考虑复杂的情况。什么限速啊,验证啊,文件大小......只实现最简单的逻辑。

客户端参考代码

import socket

def main():

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

  # 目的信息
  server_ip = input("请输入服务器ip:")
  server_port = int(input("请输入服务器port:"))

  # 链接服务器
  tcp_client_socket.connect((server_ip, server_port))

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

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

  # 接收对方发送过来的数据,最大接收1024个字节(1K)
  recv_data = tcp_client_socket.recv(1024)
  # 如果接收到数据再创建文件,否则不创建
  if recv_data:
    with open("[接收]"+file_name, "wb") as f:
      f.write(recv_data)

  # 关闭套接字
  tcp_client_socket.close()


if __name__ == "__main__":
  main()

服务端参考代码

import socket
import sys


def get_file_content(file_name):
  """获取文件的内容"""
  try:
    with open(file_name, "rb") as f:
      content = f.read()
    return content
  except:
    print("没有下载的文件:%s" % file_name)


def main():

  if len(sys.argv) != 2:
    print("请按照如下方式运行:python3 xxx.py 7890")
    return
  else:
    # 运行方式为python3 xxx.py 7890
    port = int(sys.argv[1])

  # 创建socket
  tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  # 本地信息
  address = ('', port)
  # 绑定本地信息
  tcp_server_socket.bind(address)
  # 将主动套接字变为被动套接字
  tcp_server_socket.listen(128)

  while True:
    # 等待客户端的链接,即为这个客户端发送文件
    client_socket, clientAddr = tcp_server_socket.accept()
    # 接收对方发送过来的数据
    recv_data = client_socket.recv(1024) # 接收1024个字节
    file_name = recv_data.decode("utf-8")
    print("对方请求下载的文件名为:%s" % file_name)
    file_content = get_file_content(file_name)
    # 发送文件的数据给客户端
    # 因为获取打开文件时是以rb方式打开,所以file_content中的数据已经是二进制的格式,因此不需要encode编码
    if file_content:
      client_socket.send(file_content)
    # 关闭这个套接字
    client_socket.close()

  # 关闭监听套接字
  tcp_server_socket.close()


if __name__ == "__main__":
  main()

以上就是python实现简单的tcp文件下载的详细内容,更多关于python tcp下载的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中集合类型(set)学习小结
Jan 28 Python
python中assert用法实例分析
Apr 30 Python
python僵尸进程产生的原因
Jul 21 Python
python的staticmethod与classmethod实现实例代码
Feb 11 Python
CentOS 7下安装Python3.6 及遇到的问题小结
Nov 08 Python
3分钟学会一个Python小技巧
Nov 23 Python
python使用xlrd模块读取xlsx文件中的ip方法
Jan 11 Python
Python使用统计函数绘制简单图形实例代码
May 15 Python
使用Fabric自动化部署Django项目的实现
Sep 27 Python
Python socket实现的文件下载器功能示例
Nov 15 Python
Python爬虫:Request Payload和Form Data的简单区别说明
Apr 30 Python
python使用selenium爬虫知乎的方法示例
Oct 28 Python
实现Python3数组旋转的3种算法实例
Sep 16 #Python
Python私有属性私有方法应用实例解析
Sep 15 #Python
PyQt5多线程防卡死和多窗口用法的实现
Sep 15 #Python
PyQt5结合matplotlib绘图的实现示例
Sep 15 #Python
pycharm激活方法到2099年(激活流程)
Sep 22 #Python
pycharm专业版远程登录服务器的详细教程
Sep 15 #Python
深入浅析pycharm中 Make available to all projects的含义
Sep 15 #Python
You might like
php解析json数据实例
2014/08/19 PHP
php实现的IMEI限制的短信验证码发送类
2015/05/05 PHP
网页运行时提示对象不支持abigimage属性或方法
2014/08/10 Javascript
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
2014/12/12 Javascript
分享网页检测摇一摇实例代码
2016/01/14 Javascript
仿百度换肤功能的简单实例代码
2016/07/11 Javascript
JavaScript Date对象应用实例分享
2017/10/30 Javascript
nodejs实现截取上传视频中一帧作为预览图片
2017/12/10 NodeJs
JavaScript基础之静态方法和实例方法分析
2018/12/26 Javascript
JS图片预加载三种实现方法解析
2020/05/08 Javascript
JavaScript中继承原理与用法实例入门
2020/05/09 Javascript
Vue中用JSON实现刷新界面不影响倒计时
2020/10/26 Javascript
[02:30]DOTA2英雄基础教程 暗影恶魔
2013/12/17 DOTA
Python yield 小结和实例
2014/04/25 Python
matplotlib绘图实例演示标记路径
2018/01/23 Python
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
用python 批量更改图像尺寸到统一大小的方法
2018/03/31 Python
python3.7.0的安装步骤
2018/08/27 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
2018/12/05 Python
Django+Xadmin构建项目的方法步骤
2019/03/06 Python
Django框架用户注销功能实现方法分析
2019/05/28 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
linux环境下安装python虚拟环境及注意事项
2020/01/07 Python
Python学习工具jupyter notebook安装及用法解析
2020/10/23 Python
10个示例带你掌握python中的元组
2020/11/23 Python
英国浴室洗脸盆购物网站:Click Basin
2018/06/08 全球购物
重新定义牛仔布,100美元以下:Warp + Weft
2018/07/25 全球购物
汽车维修专业毕业生的求职信分享
2013/12/04 职场文书
就业自荐信
2013/12/04 职场文书
交通事故检查书范文
2014/01/30 职场文书
医院搬迁方案
2014/06/14 职场文书
党员自评材料范文
2014/12/17 职场文书
教育实习指导教师评语
2014/12/31 职场文书
办公室禁烟通知
2015/04/23 职场文书
教你解决往mysql数据库中存入汉字报错的方法
2021/05/06 MySQL
Django与数据库交互的实现
2021/06/03 Python