上传下载简单版

server------------

#!/usr/bin/env python
# encoding: utf-8  
# Date: 2018/6/7

import socket
import os
import json
import struct

shar_dir = r‘E:\python\PycharmProjects\python.base.demo\model3\socket1\上传下载\简单版本\server\share‘

phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
phone.bind((‘127.0.0.1‘, 9909))
phone.listen(5)
print(‘starting...‘)
while True:
    conn,client_addr = phone.accept()
    print(client_addr)

while True:
        try:
            # 1收命令
            res = conn.recv(8096)  # b‘get a.txt‘
            if not res:break

# 2,解析命令,提取相应命令参数
            cmds = res.decode(‘utf-8‘).split()  # [‘get‘,filename]
            filename = cmds[1]
            # 3,易读的方式打开文件,读取文件内容发送给客户端

header_dic = {
                ‘filename‘: filename,
                ‘md5‘:‘xxxdxxx‘,
                ‘file_size‘: os.path.getsize(r‘%s\%s‘ % (shar_dir, filename))
            }

header_json = json.dumps(header_dic)

header_bytes = header_json.encode(‘utf-8‘)

# 2,先发送报头的长度
            conn.send(struct.pack(‘i‘, len(header_bytes)))
            # 3,再发报头
            conn.send(header_bytes)

# 4,再发送真实的数据
            with open(‘%s\%s‘ % (shar_dir, filename), ‘rb‘) as f:
                # conn.send(f.read())
                for line in f:
                    conn.send(line)
        except ConnectionResetError:
            break
    conn.close()
phone.close()

client--------------------

#!/usr/bin/env python
# encoding: utf-8  
# Date: 2018/6/7

import socket
import struct
import json

dow_dir = r‘E:\python\PycharmProjects\python.base.demo\model3\socket1\上传下载\简单版本\client\download‘

phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
phone.connect((‘127.0.0.1‘, 9909))

while True:
    # 1,发命令
    cmd = input(‘>>:‘).strip()
    if not cmd:continue
    phone.send(cmd.encode(‘utf-8‘))

# 2,以写的方式打开一个新文件
    # 2.1收报头长度
    obj = phone.recv(4)
    header_size = struct.unpack(‘i‘, obj)[0]
    # 2.2收报头
    header_bytes = phone.recv(header_size)
    # 从报头中解析出对真实数据的描述信息
    header_json = header_bytes.decode(‘utf-8‘)
    header_dic = json.loads(header_json)
    print(header_dic)

total_size = header_dic[‘file_size‘]
    filename = header_dic[‘filename‘]
    # 2.4,接收真实的数据
    with open(‘%s\%s‘ % (dow_dir, filename), ‘wb‘) as f:  #  服务端打开读方式,这里这种wb方式容易卡主
        recv_size = 0
        while recv_size < total_size:
            line = phone.recv(1024)
            f.write(line)
            recv_size += len(line)
            print(‘总大小:%s 已下载大小: %s‘ % (total_size, recv_size))

phone.close()

原文地址:https://www.cnblogs.com/fmgao-technology/p/9189435.html

时间: 2024-07-31 06:12:33

上传下载简单版的相关文章

简单的FTP上传下载(java实现)

/** *阅读前请自己在win7上建立FTP主机 *具体步骤如:http://jingyan.baidu.com/article/574c5219d466c36c8d9dc138.html * 然后将以下FTP,username,password分别改成你的FTP ip地址 用户名 密码即可 * 本例子用了apche的commons-net-3.3.jar以方便FTP的访问 请手动buid -path * 待完成版 刷新按钮 登录 都还没有做 而且上传 下载 完成后都需要重新运行 * 2014-

salesforce 零基础学习(四十二)简单文件上传下载

项目中,常常需要用到文件的上传和下载,上传和下载功能实际上是对Document对象进行insert和查询操作.本篇演示简单的文件上传和下载,理论上文件上传后应该将ID作为操作表的字段存储,这里只演示文件上传到Document对象中. 一.文件上传功能 apex代码 1 public with sharing class FileUploadUsedTransientController { 2 3 public transient Blob fileUploadBody{get;set;} 4

基于Java的一个简单的文件上传下载功能

最近在公司给客户端做接口,有一个图片上传和文件下载的功能,本来想用Struts来做文件上传下载,但是看了下公司好像没有这个配置,然后看了下同事的代码,才发现原来Apache也可以简单的实现文件上传下载. 首先引入commons-io-2.2.jar FileUtils为我们提供了很多对文件的操作的方法,比如上传整个文件夹的文件.上传单个文件等 然后请看代码下载: public static void uploadFile(String targetDirectory,String targetF

Java用FTP实现简单的上传下载

2019-06-12 22:28:33 已经是快四年的博客园用户了,今天实在是因为遇到的坑太蛋疼了,所以写好之后想直接发个博客. 下图是FTP的练习截图: 用到了这三个jar包,jar包确实不大好找,下面是我上传的jar包连接: https://files.cnblogs.com/files/gbn007/FTP%E7%AE%80%E5%8D%95%E4%B8%8A%E4%BC%A0%E4%B8%8B%E8%BD%BD%E6%89%80%E9%9C%80%E8%A6%81%E7%9A%84jar

linux上很方便的上传下载文件工具rz和sz使用介绍

简单说就是,可以很方便地用这两个sz/rz工具,实现Linux下和Windows之间的文件传输(发送和接收),速度大概为10KB/s,适合中小文件.rz/sz 通过Zmodem协议传输数据 一般来说,linux服务器大多是通过ssh客户端来进行远程的登陆和管理的,使用ssh登陆linux主机以后,如何能够快速的和本地机器进行文件的交互呢,也就是上传和下载文件到服务器和本地: 与ssh有关的两个命令可以提供很方便的操作: sz:将选定的文件发送(send)到本地机器 rz:运行该命令会弹出一个文件

javaEE(10)_文件上传下载

一.文件上传概述 1.实现web开发中的文件上传功能,需完成如下二步操作: •在web页面中添加上传输入项•在servlet中读取上传文件的数据,并保存到本地硬盘中. 2.如何在web页面中添加上传输入项?    <input type=“file”>标签用于在web页面中添加文件上传输入项,设置文件上传输入项时须注意:•必须要设置input输入项的name属性,否则浏览器将不会发送上传文件的数据.•必须把form的enctype属值设为multipart/form-data.设置该值后,浏览

关于使用SecureCRT 实现 WIN7 与 Linux 双向通信的问题及文件上传下载

Linux 版本:Cent 6.5 X86 VMware workstation 10.0 win7 Ultimate x86 ,Linux 均可以正常链接网络[采用桥接方式] 遇到问题: win7 可以 ping 通linux及网关,linux不能ping通网关及win7,但能链接网络. 前提: 需要手动配置linux的IP为静态,WIN7的可以随意,但是一般在一个网段(不然配置较复杂了),保证可以正常通信访问. 解决: 通过手动改ip及相关配置的方法之后,仍然未能ping通,改链接方式为NA

在linux命令行利用SecureCRT上传下载文件

一般来说,linux服务器大多是通过ssh客户端来进行远程的登陆和管理的,使用ssh登陆linux主机以后,如何能够快速的和本地机器进行文件的交互呢,也就是上传和下载文件到服务器和本地?与ssh有关的两个命令可以提供很方便的操作:    sz:将选定的文件发送(send)到本地机器    rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive) rz,sz是便是Linux/Unix同Windows进行ZModem文件传输的命令行工具 windows端需要支持ZMode

SecureCRT上传下载数据的方法

转自http://blog.sina.com.cn/s/blog_4af3b94f0101kfw5.html ———————————————————————————————————————————————————— SecureCRT这款SSH客户端软件同时具备了终端仿真器和文件传输功能.比ftp命令方便多了,而且服务器不用再开FTP服务了.rz,sz是便是Linux/Unix同Windows进行ZModem文件传输的命令行工具. windows端需要支持ZModem的telnet/ssh客户端