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 ...
随机推荐
- TYVJ 1541 八数码
Orz双向搜索的cy大神 我用的是hash 也蛮快的 //By SiriusRen #include <queue> #include <cstdio> using names ...
- Resolving Problems installing the Java JCE Unlimited Strength Jurisdiction Policy Files package--转
原文地址:https://www.ca.com/us/services-support/ca-support/ca-support-online/knowledge-base-articles.tec ...
- VisualStudio UnitTest FrameWork
当创建单元测试时,Microsoft.VisualStudio.TestTools.UnitTesting的名字控件会添加到测试项目中,该名字控件中包含很多有用的类: 断言类:在单元测试中验证条件 初 ...
- word2tex之类的问题
首先就是这个word2tex一般是在word和tex文本互相转换的时候用的. 以前win7下用的chikrii忘了使用方法.. 之后再win10下用的excel2tex,但是转换时候总感觉不如word ...
- javascript 精确加减乘除
最近一个项目中要使用 JS 实现自动计算的功能,本以为只是实现简单的加.减.乘.除就可以了,于是三下五除二做完了. 正当我窃喜的时候,发现问题了... 进行一些浮点数运算时,计算结果都是让我大跌眼镜啊 ...
- oracle动态磁盘管理
一.ASM发展: oracle 想做硬件: 收购sum公司的小型机业务 推出一体机Exadata 1.sum服务器 2.磁盘柜(没做存储) 推出asm建库方式配合一体机(自动使用磁盘柜的盘)(抛弃ra ...
- 小型ceph集群的搭建
了解ceph DFS(distributed file system)分布式存储系统,指文件系统管理的物理存储资源,不一定直接连接在本地节点上,而是通过计算机网络与节点相连,众多类别中,ceph是当下 ...
- 洛谷P1136 迎接仪式 动态规划
显然,这是一道动归题. 我们发现,每次交换时只可能交换不同的字母(交换同类字母显然是没有意义的).那么每次交换等同于将 111 个 "j""j""j& ...
- NodeJS学习笔记 (1)资源压缩-zlib(ok)
原文: https://github.com/chyingp/nodejs-learning-guide/blob/master/README.md 自己的跟进学习: 概览 做过web性能优化的同学, ...
- Iterator(迭代器) 和generator
数组是可迭代的 var a = []; console.dir(a); 发现这里有一个Symbol.iterator ,说明它是可迭代的. object 是不可以迭代的 var a = {} cons ...