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写的服务监控程序实例
Jan 31 Python
让Python代码更快运行的5种方法
Jun 21 Python
Python Property属性的2种用法
Jun 21 Python
Python 使用SMTP发送邮件的代码小结
Sep 21 Python
Python多线程实现同步的四种方式
May 02 Python
Django后台admin的使用详解
Jul 08 Python
python被修饰的函数消失问题解决(基于wraps函数)
Nov 04 Python
PyCharm第一次安装及使用教程
Jan 08 Python
python使用for...else跳出双层嵌套循环的方法实例
May 17 Python
解决python中0x80072ee2错误的方法
Jul 19 Python
Python 实现RSA加解密文本文件
Dec 30 Python
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
Apr 14 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中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
2012/11/01 PHP
php中opendir函数用法实例
2014/11/15 PHP
开启PHP的伪静态模式
2015/12/31 PHP
PHP接口类(interface)的定义、特点和应用示例
2020/05/18 PHP
动态修改DOM 里面的 id 属性的弊端分析
2008/09/03 Javascript
javascript form 验证函数 弹出对话框形式
2009/06/23 Javascript
jquery选择器(常用选择器说明)
2010/09/28 Javascript
Jquery中显示隐藏的实现代码分析
2011/07/26 Javascript
JavaScript获取网页表单提交方式的方法
2015/04/02 Javascript
深入理解js数组的sort排序
2016/05/28 Javascript
Vue.js 和 MVVM 的注意事项
2016/11/07 Javascript
js闭包用法实例详解
2016/12/13 Javascript
微信小程序 tabs选项卡效果的实现
2017/01/05 Javascript
JS使用插件cryptojs进行加密解密数据实例
2017/05/11 Javascript
JQuery 选择器、DOM节点操作练习实例
2017/09/28 jQuery
Node.js利用console输出日志文件的方法示例
2018/04/27 Javascript
webstorm中vue语法的支持详解
2018/05/09 Javascript
vue异步axios获取的数据渲染到页面的方法
2018/08/09 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
selenium+python实现自动登录脚本
2018/04/22 Python
用python处理图片之打开\显示\保存图像的方法
2018/05/04 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
Python插件机制实现详解
2020/05/04 Python
PyCharm最新激活码(2020/10/27全网最新)
2020/10/27 Python
物流仓储计划书
2014/01/10 职场文书
20岁生日感言
2014/01/13 职场文书
新年爱情寄语
2014/04/08 职场文书
中学生教师节演讲稿
2014/09/03 职场文书
网站出售协议书范文
2014/10/10 职场文书
群众路线领导班子整改方案
2014/10/25 职场文书
2014年计生协会工作总结
2014/11/21 职场文书
公司员工培训管理制度
2015/08/04 职场文书
高一军训口号
2015/12/25 职场文书
【DOTA2】总决赛血虐~ XTREME GAMING vs MAGMA - OGA DOTA PIT 2022 CN
2022/04/02 DOTA
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技