[terry笔记]python FTP
如下是作业,用python做一个ftp,主要利用socket。
server端在linux下运行,在client端可以执行shell命令(静态的)
在client端输入get xxx,即可下载。
在client端输入put xxx,即可上传。
server端:
import socket
import subprocess
import os
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(("0.0.0.0",8000))
server.listen(5)
print("start to listen".center(30,"-")) while True:
conn,client_addr = server.accept()
print(conn,client_addr)
while True:
try:
data = conn.recv(1024)
print("receive from client :",data)
if (data.decode()).startswith("get"):
data_cmd = data.decode()
data_cmd_list = data_cmd.split(" ")
file_name = data_cmd_list[-1]
conn.send(str(os.path.getsize(file_name)).encode())
f = open(file_name,"rb")
f_data = f.readlines()
for line in f_data:
conn.send(line)
elif (data.decode()).startswith("put"):
data_size = conn.recv(1024)
if data_size.decode() == "no file":
continue
print("The file's size is %sM" % round(int(data_size.decode()) / 1024 / 1024, 2))
data_list = (data.decode()).split(" ")
file_name = data_list[-1]
f = open(file_name, "wb")
total_size = int(data_size.decode())
file_size = 0
while True:
data2 = conn.recv(1024)
f.write(data2)
file_size += len(data2)
if file_size == total_size:
break
f.close()
print("file upload done")
else:
res_obj = subprocess.Popen(data,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
res = res_obj.stdout.read()
conn.send(str(len(res)).encode())
print("--res len :",len(res))
conn.send(res)
except ConnectionResetError as e:
print(client_addr,"is break")
break
except FileNotFoundError as e:
print("there is no such file!")
conn.send(b"no file")
continue
client端:
import socket
import os
client = socket.socket()
client.connect(("192.168.168.128",8000))
# client.connect(("localhost",8000)) while True:
try:
msg = input(">>>>>").strip()
if len(msg) == 0: continue
client.send(msg.encode())
if msg.startswith("get"):
data = client.recv(1024)
if data.decode() == "no file":
print("there is no such file!")
continue
else:
print("The file's size is %sM" % round(int(data.decode())/1024/1024,2))
msg_list = msg.split(" ")
file_name = msg_list[-1]
f = open(file_name,"wb")
total_size = int(data.decode())
file_size = 0
while True:
data2 = client.recv(1024)
f.write(data2)
file_size += len(data2)
if file_size == total_size:
break
f.close()
elif msg.startswith("put"):
msg_cmd_list = msg.split(" ")
file_name = msg_cmd_list[-1]
client.send(str(os.path.getsize(file_name)).encode())
f = open(file_name, "rb")
f_data = f.readlines()
for line in f_data:
client.send(line)
else:
data = client.recv(1024)
print("client receive:", data.decode())
total_size = int(data.decode())
received_size = 0
res = b""
while received_size < total_size:
d = client.recv(1024)
res += d
received_size += len(d)
print("-----receive done-----")
print(res.decode())
except FileNotFoundError as e:
print("There is no such file!")
client.send(b"no file")
continue
[terry笔记]python FTP的更多相关文章
- [terry笔记]Python字符串
如下学习python的字符串用法. print(dir(str)) ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', ...
- [terry笔记]python内置函数
总结一下内置函数,Build-in Function. 一.数学运算类 abs(x) 求绝对值 complex([real[, imag]]) 创建一个复数 divmod(a, b) 分别取商和余数注 ...
- [terry笔记]python三级菜单
把三级菜单输出,选择后逐层显示,”b“返回上一级菜单. menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村': ...
- [terry笔记]python购物程序
如下是一个购物程序: 先输入工资,显示商品列表,购买,quit退出,最后格式化输出所买的商品. count = 0 while True: #做一个循环判断,如果输入的不是数字,基于提示,三次后退出 ...
- [terry笔记]RMAN综合学习之恢复
[terry笔记]RMAN综合学习之备份http://www.cnblogs.com/kkterry/p/3308405.html [terry笔记]RMAN综合学习之恢复 http://www.cn ...
- [terry笔记]RMAN综合学习之备份
rman是最经济实惠的oracle备份工具,在这里做一个rman的整体学习. 文章中大多是rman命令的语法,还是最好做做实验,以便印象深刻,因为大多数数据库的备份就是按时跑脚本,恢复也不是经常能遇到 ...
- [terry笔记]RMAN综合学习之配置
[terry笔记]RMAN综合学习之备份http://www.cnblogs.com/kkterry/p/3308405.html [terry笔记]RMAN综合学习之恢复 http://www.cn ...
- [terry笔记]Oracle会话追踪(二):TKPROF
接上一笔记[terry笔记]Oracle会话追踪(一):SQL_TRACE&EVENT 10046 http://www.cnblogs.com/kkterry/p/3279282.html ...
- [terry笔记]Oracle会话追踪(一):SQL_TRACE&EVENT 10046
SQL_TRACE/10046 事件是 Oracle 提供的用于进行 SQL 跟踪的手段,在日常的数据库问题诊断和解决中是非常常用的方法.但其生成的trace文件需要tkprof工具生成一个可供人 ...
随机推荐
- JavaScript之this释疑
近期进修JavaScript,看了"You Don't Know JS"这本书,认为是本JavaScript内功上乘心法,有一定JavaScript基础朋友一定要看看(不推荐入门小 ...
- Android Drawable 那些不为人知的高效使用方法
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43752383,本文出自:[张鸿洋的博客] 1.概述 Drawable在我们平时的 ...
- Milk(杭电1070)
Milk Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- Win+X
Win+X 方便的快捷键,可以快速使用命令行和运行!
- xargs用例一个
ls -a *.doc|awk -F. '{print $1}' |xargs -I {} java -jar ~/soft/jodconverter-2.2.2/lib/jodconverter-c ...
- DB-SQL-MySQL-杂项-调优:Mysql千万以上数据优化、SQL优化方法
ylbtech-DB-SQL-MySQL-杂项-调优:Mysql千万以上数据优化.SQL优化方法 1.返回顶部 1. 1,单库表别太多,一般保持在200以下为宜 2,尽量避免SQL中出现运算,例如se ...
- 18. 4Sum[M]四数之和
题目 Given an array nums of n integers and an integer target, are there elements a, b, c and d in nums ...
- Bata版本
一.团队成员 1)冯鹏(组长) 201731062617 2)鲜泽 201731062612 3)李家豪 201731062614 4)郭经伟 201731062615 5)程前勇 2017310 ...
- Python中functools模块函数解析
Python自带的 functools 模块提供了一些常用的高阶函数,也就是用于处理其它函数的特殊函数.换言之,就是能使用该模块对可调用对象进行处理. functools模块函数概览 functool ...
- Core Java(三)
三.运算符&流程控制 运算符---http://blog.csdn.net/typa01_kk/article/details/45000535 在一个程序执行的过程中,各条语句的执行顺序对程 ...