如何使用python socket模块实现简单的文件下载

server端:

# ftp server端
import socket, os, time

server = socket.socket()
server.bind(("localhost", 8080))
server.listen()
while True:
  conn, addr = server.accept()
  print("连接到客户端:", addr)
  while True:
    try: # windows会直接报错,需要捕获异常
      data = conn.recv(1024)
      if not data:
        print("客户端已断开")
        break
    except Exception as e:
      print("客户端已经断开")
      break
    cmd, filename = data.decode().split() # ex: get name.txt
    if os.path.isfile(filename):
      f = open(filename, "rb")
      # 获取文件的字节大小
      size = os.stat(filename).st_size
      conn.send(str(size).encode()) # 发送文件大小
      conn.recv(1024)
      for line in f:  # 客户端确认后发送文件内容
        conn.send(line)
      f.close()
      print("文件下载完成")
    conn.send("not file".encode())
server.close()

client端:

import socket

client = socket.socket()
client.connect(("localhost", 8080))
while True:
  cmd = input(">>:").strip()
  if len(cmd)==0: continue
  if cmd.startswith("get"):
    client.send(cmd.encode()) # 发送请求
    server_response = client.recv(1024)
    if server_response.decode().startswith("not"):
      print("请输入有效文件名")
      continue
    client.send(b"ready to recv file") # 发送确认
    file_size = int(server_response.decode()) # 获取文件大小
    rece_size=0
    filename = cmd.split()[1]
    f = open(filename + ".new", "wb")
    while rece_size < file_size:
      if file_size - rece_size > 1024: # 要收不止一次
        size = 1024
      else: # 最后一次了,剩多少收多少,防止之后发送数据粘包
        size = file_size - rece_size
        print("last receive:", size)
      recv_data = client.recv(size)
      rece_size += len(recv_data) # 累加接受数据大小
      f.write(recv_data) # 写入文件,即下载
    else:
      print("文件下载完成")
      f.close()
client.close()

测试案例:

以上就是如何使用python socket模块实现简单的文件下载的详细内容,更多关于python socket文件下载的资料请关注我们其它相关文章!

(0)

相关推荐

  • 虚拟机下载python是否需要联网

    虚拟机下载python需要联网,因为python的安装包是存储在python的官网上,必须要通过网络访问官网才能下载 下载方法:https://www.python.org/ 访问python官网,点击download下面的python版本 在跳转后的页面翻到最下面,选择第一个就行了 到此这篇关于虚拟机下载python是否需要联网的文章就介绍到这了,更多相关虚拟机下载python需要联网吗内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

  • Python Socketserver实现FTP文件上传下载代码实例

    一.Socketserver实现FTP,文件上传.下载 目录结构 1.socketserver实现ftp文件上传下载,可以同时多用户登录.上传.下载 效果图: 二.上面只演示了下载,上传也是一样的,来不及演示了,上代码 1.客户端 import socket,hashlib,os,json,sys,time class Ftpclient(object): def __init__(self): self.client = socket.socket() def connect(self,ip,

  • 如何利用python web框架做文件流下载的实现示例

    hello 大家好, 前不久公司里有个需求,把时序数据库中的日志下载到本地. 大家都知道. 数据库里的数据 都是存在数据库里的(废话). 想把他下载到客户的本地. 有的同学第一反应是: 只有文件才能下载. 所以大多数同学会想到先把数据从数据库中读出来,然后写入到服务器中的某个文件夹下生成文件, 然后再下载. 其实这是非常不效率的方法, 最简单的方法是,我们从数据库中读取到文件后, 直接以流的形式让用户去下载. 这里我拿python flask框架来做例子,其实非常简单,步骤一共有3个 1: 取出

  • python下载的库包存放路径

    python下载的库包存放位置: 打开python的安装目录,双击打开Lib文件夹 找到"site-packages"文件夹并打开,下载的库包就出来了 内容扩展: 将依赖包目录放置bai到*:\Python*\Lib\site-packages\中,即python的安装目录中. 首先确du定API目录下是否有__init__.py文件,如果没zhi有,请新建一个.dao 打开API主运行文件,查看里面的类名称.此处为main.py文件,类为class dcVerCode. 此处以导入m

  • Python socket实现的文件下载器功能示例

    本文实例讲述了Python socket实现的文件下载器功能.分享给大家供大家参考,具体如下: 文件下载器 先写客户端再写服务端 1.tcp下载器客户端 import socket def main(): # 创建套接字 tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 获取服务器ip和port dest_ip = input("请输入下载服务器的ip:") dest_port = int(input(&qu

  • Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作

    1. 目标 通过hadoop hive或spark等数据计算框架完成数据清洗后的数据在HDFS上 爬虫和机器学习在Python中容易实现 在Linux环境下编写Python没有pyCharm便利 需要建立Python与HDFS的读写通道 2. 实现 安装Python模块pyhdfs 版本:Python3.6, hadoop 2.9 读文件代码如下 from pyhdfs import HdfsClient client=HdfsClient(hosts='ghym:50070')#hdfs地址

  • 如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单

    需求:根据医保中心的文档和提供的dll动态库调用相关接口下载医保中心的账单. 文档:对调用dll动态库的描述,调用哪个dll文件,同时了解清楚调用这个dll文件中的哪个函数. 分析:结合文档及相关介绍弄清楚相关接口调用流程,从以上可以看出接口调用的是SiInterface.dll文件,然后先调用INIT函数进行初始化,然后再调用BUSINESS_HANDLE函数在医保局签到,然后在次调用BUSINESS_HANDLE函数下载账单,同时根据文档分析出每次调用函数的出入参.(具体的调用流程及每个函数

  • 完美解决python针对hdfs上传和下载的问题

    当我们使用python的hdfs包进行上传和下载文件的时候,总会出现如下问题 requests.packages.urllib3.exceptions.NewConnectionError:<requests.packages.urllib3.connection.HTTPConnection object at 0x7fe87cc37c50>: Failed to establish a new connection: [Errno -2] Name or service not known

  • Python生成并下载文件后端代码实例

    txt文件 生成并下载txt文件: @app.route('/download', methods=['GET']) def download(): content = "long text" response = make_response(content) response.headers["Content-Disposition"] = "attachment; filename=myfilename.txt" return respons

  • 如何使用python socket模块实现简单的文件下载

    server端: # ftp server端 import socket, os, time server = socket.socket() server.bind(("localhost", 8080)) server.listen() while True: conn, addr = server.accept() print("连接到客户端:", addr) while True: try: # windows会直接报错,需要捕获异常 data = conn

  • Python利用socket模块开发简单的端口扫描工具的实现

    一.socket 1.简介 Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. socket的工作流程 socket 采用C/S 模式,分为服务端和客户端 服务端数据处理流程 创建socket -> 绑定到地址和端口 -> 等待连接 -> 开始通信-> 关闭连接 客户端数据处理流程 创建socket -> 等待连接 -> 开始通信-> 关闭连接 客

  • Python socket实现的简单通信功能示例

    本文实例讲述了Python socket实现的简单通信功能.分享给大家供大家参考,具体如下: 套接字(socket)是计算机网络数据结构,在任何类型的通信开始之前,网络应用程序必须创建套接字,可以将其比作电话的插孔,没有它将无法进行通信 常用的地址家族 AF_UNIX:基于文件,实现同一主机不同进程之间的通信 AF_INET:基于网络,适用于IPv4 AF_INET6:基于网络,使用于IPv6 常见的连接类型 SOCK_STREAM:即TCP/IP.面向连接的套接字,通信之前必须建立可靠的连接.

  • Python socket模块实现的udp通信功能示例

    本文实例讲述了Python socket模块实现的udp通信功能.分享给大家供大家参考,具体如下: socket介绍 socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是: 它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ 聊天.收发 email 等等. 模拟udp_socket客户端(发送端):udp_client.py #coding=utf-8 import socket # 获

  • Python socket模块ftp传输文件过程解析

    这篇文章主要介绍了Python socket模块ftp传输文件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 使用环境:python3,window环境,需要在头部声明# -*- coding:utf-8 -*- 实现功能: 将sever端所处文件夹的文件,传输到client端所处的文件夹中. 并且通过md5检测是否出错. 客户端命令的形式是: get 文件名 client处的新文件是 文件名.new ftp_sever.py impo

  • Python socket模块方法实现详解

    这篇文章主要介绍了Python socket模块方法实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 socket ssh (不带防止粘包的方法) #! /usr/bin/env python # -*- coding:utf-8 -*- # Author Ian Ying # mail: kongqing.ying@yitu-inc.com import socket import os server = socket.socket()

  • python xml模块的简单使用

    一.xml简介 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要是xml. xml的格式如下,就是通过<>节点来区别数据结构的: <?xml version="1.0"?> <data> <country name="Liechtenstein"> <r

  • python tkinter模块的简单使用

    由于一些小原因,被迫开始了tkinter一次实战演练.在此做一些记录,总结以及给自己留一些轮子哈哈哈哈哈哈 tkinter 是 Python 的一个GUI库,本次实战完全使用tkinter,不牵扯任何其他第三方库的使用. 1.任务要求 画一个具有上传病患信息以及图片功能的用户界面 2.简单设计 由于时间紧迫且只要求可视化,背后没有必要太过精细,所以简单设计思路是,利用下拉列表实现病患信息的填写,用text显示选择图片的路径. 表面上的组件包括:两个Button:选择目录 SELECT THE D

  • Python webargs 模块的简单使用

    目录 一.安装 二.基础特性 2.1. 使用 2.1.1 通过装饰器 2.1.2 通过函数 2.2 参数检查 2.3 检查失败处理 2.4 嵌套参数 三.高级特性 3.1 自定义location 3.2 定义schema 3.3 未定义的参数处理 3.4 Flask的url参数 webargs是一个用于解析和验证HTTP请求对象的Python库,内置了对流行web框架的支持,包括Flask.Django.Bottle.Tornado.Pyramid.webapp2.Falcon和aiohttp.

  • Python使用socket模块实现简单tcp通信

    正文开始: 服务器端代码: # 再来简单的测试,这个是服务器端 import socket import sys BUF_SIZE = 1024 ip_port = (r"127.0.0.1", 11552) my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 先拿到套接字,指定个ipv4以及流式数据包 my_socket.bind(ip_port) # 绑定 my_socket.listen(2) # 循环等

随机推荐