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程序中实现分布式进程的教程
Apr 28 Python
Python中的with语句与上下文管理器学习总结
Jun 28 Python
Python实现mysql数据库更新表数据接口的功能
Nov 19 Python
Jupyter中直接显示Matplotlib的图形方法
May 24 Python
对web.py设置favicon.ico的方法详解
Dec 04 Python
python xpath获取页面注释的方法
Jan 14 Python
解决Pytorch 加载训练好的模型 遇到的error问题
Jan 10 Python
浅析matlab中imadjust函数
Feb 27 Python
基于python图像处理API的使用示例
Apr 03 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
Jul 03 Python
matplotlib.pyplot.plot()参数使用详解
Jul 28 Python
快速创建python 虚拟环境
Nov 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
apache+php完美解决301重定向的两种方法
2011/06/08 PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
2011/08/03 PHP
图解找出PHP配置文件php.ini的路径的方法
2014/08/20 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
2018/04/20 PHP
js实现图片放大缩小功能后进行复杂排序的方法
2012/11/08 Javascript
js判断生效时间不得大于失效时间的思路及代码
2013/04/23 Javascript
jquery ztree异步搜索(搜叶子)实践
2016/02/25 Javascript
gulp-uglify 与gulp.watch()配合使用时报错(重复压缩问题)
2016/08/24 Javascript
详解Node.js利用node-git-server快速搭建git服务器
2017/09/27 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
2017/11/15 Javascript
解决Webpack 热部署检测不到文件变化的问题
2018/02/22 Javascript
微信小程序input框中加入小图标的实现方法
2018/06/19 Javascript
jquery层次选择器的介绍
2019/01/18 jQuery
vue路由 遍历生成复数router-link的例子
2019/10/30 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
AutoJs实现刷宝短视频的思路详解
2020/05/22 Javascript
react-native 实现购物车滑动删除效果的示例代码
2021/01/15 Javascript
浅谈Python Opencv中gamma变换的使用详解
2018/04/02 Python
PyQt5每天必学之像素图控件QPixmap
2018/04/19 Python
使用pycharm生成代码模板的实例
2018/05/23 Python
python函数map()和partial()的知识点总结
2020/05/26 Python
Windows 平台做 Python 开发的最佳组合(推荐)
2020/07/27 Python
爬虫代理的cookie如何生成运行
2020/09/22 Python
HTML5本地数据库基础操作详解
2016/04/26 HTML / CSS
AmazeUI 输入框组的示例代码
2020/08/14 HTML / CSS
期末总结的个人自我评价
2013/11/02 职场文书
产品销售员岗位职责
2013/12/18 职场文书
文秘求职信范文
2014/04/10 职场文书
服务之星事迹材料
2014/05/03 职场文书
小学家长通知书评语
2014/12/31 职场文书
违纪检讨书
2015/01/27 职场文书
中班上学期个人总结
2015/02/12 职场文书
反邪教警示教育活动总结
2015/05/09 职场文书
邹越演讲观后感
2015/06/15 职场文书
数学备课组工作总结
2015/08/12 职场文书
2022漫威和DC电影上映作品
2022/04/05 欧美动漫