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中的闭包和装饰器
Jun 12 Python
浅谈编码,解码,乱码的问题
Dec 30 Python
Python的爬虫框架scrapy用21行代码写一个爬虫
Apr 24 Python
一个简单的python爬虫程序 爬取豆瓣热度Top100以内的电影信息
Apr 17 Python
python实现按长宽比缩放图片
Jun 07 Python
Python实现快速计算词频功能示例
Jun 25 Python
Django框架下静态模板的继承操作示例
Nov 08 Python
Django框架获取form表单数据方式总结
Apr 22 Python
pycharm专业版远程登录服务器的详细教程
Sep 15 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
Jan 08 Python
python生成word合同的实例方法
Jan 12 Python
anaconda python3.8安装后降级
Jun 11 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
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
2012/07/15 PHP
php操作路径的经典方法(必看篇)
2016/10/04 PHP
PHP实现图片批量打包下载功能
2017/03/01 PHP
JavaScript之自定义类型
2012/05/04 Javascript
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
2013/07/09 Javascript
js字符串截取函数substr substring slice使用对比
2013/11/27 Javascript
Jquery基础之事件操作详解
2016/06/14 Javascript
AngularJs Understanding the Controller Component
2016/09/02 Javascript
JS验证图片格式和大小并预览的简单实例
2016/10/11 Javascript
vue2.0开发实践总结之入门篇
2016/12/06 Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
2017/04/13 Javascript
详解Node.js access_token的获取、存储及更新
2017/06/20 Javascript
JS中Safari浏览器中的Date
2017/07/17 Javascript
20170918 前端开发周报之JS前端开发必看
2017/09/18 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
Python复制目录结构脚本代码分享
2015/03/06 Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
解决Python requests 报错方法集锦
2017/03/19 Python
Django跨域请求CSRF的方法示例
2018/11/11 Python
详解Python3定时器任务代码
2019/09/23 Python
命令行运行Python脚本时传入参数的三种方式详解
2019/10/11 Python
python实现身份证实名认证的方法实例
2019/11/08 Python
pip install 使用国内镜像的方法示例
2020/04/03 Python
利用python汇总统计多张Excel
2020/09/22 Python
html5使用canvas绘制太阳系效果
2014/12/15 HTML / CSS
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
奥地利度假券的专家:we-are.travel
2019/04/10 全球购物
日本最大的购物网站:日本乐天市场(Rakuten Ichiba)
2020/11/04 全球购物
电子商务专业自我鉴定
2013/12/18 职场文书
门前三包责任书
2014/04/15 职场文书
2015年毕业实习工作总结
2014/12/12 职场文书
画展邀请函
2015/01/31 职场文书
客户经理岗位职责大全
2015/04/09 职场文书
2015年教师师德师风承诺书
2015/04/28 职场文书
教师远程研修感悟
2015/11/18 职场文书