python ftp
#fpt_server.py
#__*__ encoding=utf-8 __*__
import socket ,os class MyClass(object): def __init__(self):
print('server start.....')
server = socket.socket()
server.bind(('localhost',8888))
server.listen() while True:
conn, addr = server.accept()
print("new conn:",addr)
while True:
print("等待新指令")
data = conn.recv(1024)
if not data:
print("客户端已断开")
break
cmd,filename = data.decode().split()
print(filename)
if os.path.isfile(filename): #�ж��Ƿ����ļ�
f = open(filename,"rb") #���ļ�
file_size = os.stat(filename).st_size #�ļ���С
conn.send( str(file_size).encode() ) #send file size ��ֹճ��
conn.recv(1024) #wait for ack
for line in f:
conn.send(line) #��ʼ����
f.close()
print("send done") server.close()
#ftp_client.py
#__*__ encoding=utf-8 __*__
import socket
import hashlib
from gettext import find class MyClass(object): def __init__(self):
print('client start....')
client = socket.socket()
client.connect(('localhost', 8888))
targetpath='E:\\python\\recievedir'
while True:
cmd = input(">>:").strip()
if len(cmd) == 0:
print('test cmd len is 0')
continue if cmd.startswith("get"): #判断是否以字符串‘get’ 开头
client.send(cmd.encode()) #把需要下载的文件发给server端
server_response = client.recv(1024) #接收server端发过来的文件大小
print("servr response:", server_response) #打印文件大小
client.send(b"ready to recv file") #防止粘包
file_total_size = int(server_response.decode())
print(file_total_size)
received_size = 0 #已经接收的大小
filename = cmd.split()[1]
targetname=filename
targetname=MyClass.retFileWithType('',targetname)
f = open(targetpath+'\\'+targetname + ".new", "wb") #创建新文件 用于保存
# f = open(filename + ".new", "wb") #创建新文件 用于保存 while received_size < file_total_size:
if file_total_size - received_size > 1024: # 要收不止一次
size = 1024
else: # 最后一次了,剩多少收多少
size = file_total_size - received_size
print("last receive:", size) data = client.recv(size)
received_size += len(data)
f.write(data)
# print(file_total_size,received_size)
else:
print("file recv done", received_size, file_total_size)
f.close()
client.close() def retFileWithType(self,xname):
# xname=r'E:\\python\\recievedir\\data.pkl'
# xname=r'E:\python\test.jpg'
# print(xname)
xname=repr(xname)
FileWithType=""
try:
if xname.index(r'\\')>0 :
xname=xname.replace(r'\\', '\\')
x=xname.rfind('\\')
# print(x,xname[x+1:])
retFileWithType=xname[x+1:] except (ValueError) as e:
xname=xname.replace('\\', r"\\")
x=xname.rfind(r'\\')
# print(x,xname[x+2:])
retFileWithType=xname[x+2:] retFileWithType = retFileWithType.replace("\'",'') return retFileWithType
python ftp的更多相关文章
- python ftp操作脚本&常用函数
需求:快速进行ftp上传 ,下载,查询文件 原来直接在shell下操作: 需要[连接,输用户名,输密码,单文件操作,存在超时限制] 太过于繁琐,容易操作失败 脚本改进: 一句命令,搞定多文件上传,下载 ...
- python ftp download with progressbar
i am a new one to learn Python. Try to download by FTP. search basic code from baidu. no one tells h ...
- python ftp sftp
ftp 上传下载文件 12345678910111213141516171819202122232425262728293031323334 from ftplib import FTPimport ...
- python FTP上传和下载文件
1. 连接FTP server import ftplib ftp = ftplib.FTP(ftpserver, user, passwd) 等同于 import ftplib ftp = ftpl ...
- Python FTP多线程爆破脚本
初学python, 自己编写了个FTP多线爆破小脚本代码很丑= = #!usr/bin/env python #!coding=utf-8 __author__='zhengjim' from ftp ...
- python ftp 上传
#!/usr/bin/python # -*-coding:utf- -*- from ftplib import FTP def ftpconnect(host,username,password) ...
- [terry笔记]python FTP
如下是作业,用python做一个ftp,主要利用socket. server端在linux下运行,在client端可以执行shell命令(静态的) 在client端输入get xxx,即可下载. 在c ...
- ftplib python ftp
在气象领域,FTP是比较常用的一个数据来源.本文尝试采用python的ftplib包,实现了从指定ftp服务器中批量下载文件的功能.供大家学习参考. https://docs.python.org/3 ...
- python ftp批量上传文件下载文件
# encoding:utf-8 from ftplib import FTPimport osimport sys _XFER_FILE = 'FILE'_XFER_DIR = 'DIR' clas ...
- python ftp 传输文件
# -*- coding: utf-8 -*- # 本地bytes 数据上报服务器同时创建文件from ftplib import FTP import time, _io from constant ...
随机推荐
- LeetCode——Pascal's Triangle II
Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3 ...
- Baby_Step,Gaint_Step(分析具体解释+模板)
下面是总结自他人博客资料.以及本人自己的学习经验. [Baby_Step,Gaint_Step定义] 高次同余方程. BL == N (mod P) 求解最小的L.因为数据范围非常大,暴力不行 这里用 ...
- dom 编程(html和xml)
html dom与xml dom关系: 什么是 DOM? DOM 是 W3C(万维网联盟)的标准. DOM 定义了訪问 HTML 和 XML 文档的标准: "W3C 文档对象模型 (DOM) ...
- "singleTask"模式 切换到新的栈中
本文截取了网络资源的结论部分 对singletask 启动模式做笔记记录. 尽管SubActivity的launchMode被设置为"singleTask"模式,可是它并不像官方文 ...
- CoreData 从入门到精通(三)关联表的创建
上篇博客中讲了 CoreData 里增删改查的使用,学到这里已经可以应对简单的数据存储需求了.但是当数据模型复杂起来时,例如你的模型类中除了要存储 CoreData 里支持的数据类型外,还有一些自定义 ...
- Laravel-redis-订阅发布
Laravel-redis-订阅发布 标签(空格分隔): php Redis订阅发布 理解订阅发布: publish:将信息 message 发送到指定的频道 channel publish test ...
- xBIM 基础05 3D墙案例
系列目录 [已更新最新开发文章,点击查看详细] 使用编码的形式去生成一堵墙的模型需要做很多的工作. using System; using System.Collections.Generic ...
- 从零开始编写一个vue插件
title: 从零开始编写一个vue插件 toc: true date: 2018-12-17 10:54:29 categories: Web tags: vue mathjax 写毕设的时候需要一 ...
- 51nod 1632 B君的连通
题目: 这题看起来难,其实这么多概率啥的都是唬人的.甚至连快速幂都不用就可以解. 解法: n个节点,n-1条边,期望会有一半的边被炸毁(因为总体概率就是50%). 即(n-1)/2条边被炸毁,这 ...
- Golang环境配置Centos
1.下载go程序包( go1.7rc1.linux-amd64.tar.gz)(http://www.golangtc.com/static/go/1.7rc1/go1.7rc1.linux-am ...