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模块学习 filecmp 文件比较
Aug 27 Python
详细探究Python中的字典容器
Apr 14 Python
在Python中用has_key()方法查找键是否存在的教程
May 21 Python
Python使用wxPython实现计算器
Jan 30 Python
Face++ API实现手势识别系统设计
Nov 21 Python
详解Appium+Python之生成html测试报告
Jan 04 Python
Python生成一个迭代器的实操方法
Jun 18 Python
python multiprocessing模块用法及原理介绍
Aug 20 Python
python正则表达式实例代码
Mar 03 Python
django admin 添加自定义链接方式
Mar 11 Python
python requests.get带header
May 05 Python
Python文件操作及内置函数flush原理解析
Oct 13 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获取一个变量的名字的方法
2014/09/05 PHP
PHP提示Cannot modify header information - headers already sent by解决方法
2014/09/22 PHP
PHP中使用数组指针函数操作数组示例
2014/11/19 PHP
php实现的mongodb操作类
2015/05/28 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
2016/11/09 PHP
PHP会话控制实例分析
2016/12/24 PHP
php命令行模式代码实例详解
2021/02/26 PHP
关于IE7 IE8弹出窗口顶上
2008/12/22 Javascript
CSS+Jquery实现页面圆角框方法大全
2009/12/24 Javascript
轻松使用jQuery双向select控件Bootstrap Dual Listbox
2015/12/13 Javascript
JavaScript简单获取页面图片原始尺寸的方法
2016/06/21 Javascript
Laydate时间组件在火狐浏览器下有多时间输入框时只能给第一个输入框赋值的解决方法
2016/08/18 Javascript
修改Jquery Dialog 位置的实现方法
2016/08/26 Javascript
浅谈jQuery中Ajax事件beforesend及各参数含义
2016/12/03 Javascript
JS正则子匹配实例分析
2016/12/22 Javascript
div实现自适应高度的textarea实现angular双向绑定
2017/01/08 Javascript
react.js使用webpack搭配环境的入门教程
2017/08/14 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
利用Console来Debug的10个高级技巧汇总
2018/03/26 Javascript
简述Vue中容易被忽视的知识点
2019/12/09 Javascript
jQuery--遍历操作实例小结【后代、同胞及过滤】
2020/05/22 jQuery
对于Python编程中一些重用与缩减的建议
2015/04/14 Python
Pycharm无法使用已经安装Selenium的解决方法
2018/10/13 Python
树莓派安装OpenCV3完整过程的实现
2019/10/10 Python
python中如何使用insert函数
2020/01/09 Python
Python Websocket服务端通信的使用示例
2020/02/25 Python
SHEIN香港:价格实惠的女性时尚服装
2018/08/14 全球购物
数据库基础的一些面试题
2012/02/25 面试题
建筑施工实习自我鉴定
2013/09/19 职场文书
幼儿教师演讲稿
2014/05/06 职场文书
娱乐节目策划方案
2014/06/10 职场文书
主题党日活动总结
2014/07/08 职场文书
医院领导班子四风对照检查材料
2014/09/27 职场文书
幼儿园中班教师个人总结
2015/02/05 职场文书
基层工作经历证明
2015/06/19 职场文书
2015年暑期见闻
2015/07/14 职场文书