python 3.x 学习笔记14 (socket_ssh and socket_文件传输)
ssh服务端
import socket,os server = socket.socket()
server.bind(('localhost',6666)) server.listen()
conn, addr = server.accept()
while True:
print('等待新数据!')
cmd = conn.recv(1024) if len(cmd) == 0:
break data = os.popen(cmd.decode()).read()
cmd_size = len(data.encode('utf-8'))
print('检测到数据大小',cmd_size) if len(data) == 0:
data = '没有此命令!!' conn.send(str(len(data.encode('utf-8'))).encode())
order = conn.recv(1024) conn.send(data.encode('utf-8'))
print('传送完成!') server.close()
ssh客户端
import socket client = socket.socket()
client.connect(('localhost',6666))
while True:
cmd = input('>>>:') if cmd == 0:
continue client.send(cmd.encode('utf-8'))
cmd_size = client.recv(1024)
print('服务端检测到数据大小:', cmd_size) if len(cmd_size) !=0:
client.send('可以发送数据了'.encode(encoding='utf-8')) receive_size = 0
receive_cmd = b'' while receive_size < int(cmd_size.decode()):
data = client.recv(1024)
receive_size += len(data)
receive_cmd += data
else:
print('接收到数据大小:',receive_size)
print('数据接收完成!')
print(receive_cmd.decode())
socket文件传输并校验
服务端
import socket,os,hashlib server = socket.socket()
server.bind(('localhost',6666))
server.listen()
conn, addr = server.accept()
while True:
print('等待新数据!')
cmd = conn.recv(1024)
if len(cmd) == 0:
break
filename = cmd.decode().split()[1]
print(filename)
if os.path.isfile(filename): #判断文件是否存在
f = open(filename,'rb') #打开文件
m = hashlib.md5()
file_size = os.stat(filename).st_size #查询文件大小
print(file_size)
conn.send(str(file_size).encode()) #给客户端发送文件大小
conn.recv(1024) #等待并接受客户端的确认,这一步可以解决粘包问题
for line in f: #边读边循环发送文件
m.update(line) #得出每一句的md5值
conn.send(line) #发送给客户端
print('file md5:',m.hexdigest())
f.close()
conn.recv(1024)
conn.send(m.hexdigest().encode()) print('传送完成!') server.close()
socket文件传输并校验
客户端
import socket,hashlib client = socket.socket()
client.connect(('localhost',6666))
while True:
cmd = input('>>>:').strip()
if len(cmd) == 0:
continue
if cmd.startswith('get'): #传输文件名要以get开头如:get var
client.send(cmd.encode('utf-8'))
file_size = client.recv(1024)
print('服务端检测到文件大小:', int(file_size))
client.send('可以发送数据了'.encode(encoding='utf-8'))
file_total_size = int(file_size)
receive_size = 0
filename = cmd.split()[1] #以空格分割然后取出文件名
f = open('new_'+filename ,'wb')
m = hashlib.md5()
while receive_size < file_total_size:
data = client.recv(1024)
m.update(data)
receive_size += len(data)
f.write(data)
print(file_total_size, receive_size)
else:
new_file_md5 = m.hexdigest()
print('数据接收完成!')
f.close()
client.send('可以发送md5值了'.encode())
serve_md5 = client.recv(1024)
print('新文件md5:',new_file_md5)
print('原文件md5:',serve_md5) client.close()
python 3.x 学习笔记14 (socket_ssh and socket_文件传输)的更多相关文章
- Linux学习笔记14——使用fcntl实现文件锁定
期末考试快要来了,Linux学习进度一下拉下来许多.今天学习的是文件锁定,在Linux中,实现文件锁定的方法很多,例如fcntl和lockf.下面主要是fcntl的调用. fcntl函数的原型是:in ...
- 批处理学习笔记14 - 把所有.mp4文件全部拷贝进统一目录
今天下载了一套视频教程,结果发现不在同一个目录下,很乱.都放在不同文件夹下. 于是写了一个批处理来解决这个问题 @echo off for /r %%i in (*mp4) do ( copy %%i ...
- Python Built-in Function 学习笔记
Python Built-in Function 学习笔记 1. 匿名函数 1.1 什么是匿名函数 python允许使用lambda来创建一个匿名函数,匿名是因为他不需要以标准的方式来声明,比如def ...
- Python3+Selenium3+webdriver学习笔记14(等待判断 鼠标事件 )
!/usr/bin/env python -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记14(等待判断 鼠标事件 )'''from selenium im ...
- Requests:Python HTTP Module学习笔记(一)(转)
Requests:Python HTTP Module学习笔记(一) 在学习用python写爬虫的时候用到了Requests这个Http网络库,这个库简单好用并且功能强大,完全可以代替python的标 ...
- Ext.Net学习笔记14:Ext.Net GridPanel Grouping用法
Ext.Net学习笔记14:Ext.Net GridPanel Grouping用法 Ext.Net GridPanel可以进行Group操作,例如: 如何启用Grouping功能呢?只需要在Grid ...
- python网络爬虫学习笔记
python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...
- SQL反模式学习笔记14 关于Null值的使用
目标:辨别并使用Null值 反模式:将Null值作为普通的值,反之亦然 1.在表达式中使用Null: Null值与空字符串是不一样的,Null值参与任何的加.减.乘.除等其他运算,结果都是Null: ...
- golang学习笔记14 golang substring 截取字符串
golang学习笔记14 golang substring 截取字符串golang 没有java那样的substring函数,但支持直接根据 index 截取字符串mystr := "hel ...
随机推荐
- Qt-信号和槽-1对1
前言:信号和槽是Qt的核心机制,窗体和控件对象之间的沟通一般都使用信号和槽. 对于部件有哪些信号和槽,可以查看help文档. 一.使用自定义槽 1.1 新建工程 新建工程,新建Widget类(基于QW ...
- Centos7 minimal 系列之Redis(五)
一.Redis安装 1.1 .进入/usr/local 创建redis文件夹(mkdir)方便统一管理 1.2.下载redis $ wget http://download.redis.io/rele ...
- Codeforces 993C. Careful Maneuvering(详细注解)
解题思路 -100和+100是没有用的,只要知道左边的飞船轴和右边的飞船轴离y轴一样近即可.为简单起见,我们将左边的轴设为-1,右边的设为1. 某个点能摧毁的飞船一定是因为有两个飞船关于这个点对称.即 ...
- 给SearchView设置样式
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http:/ ...
- Hibernate框架学习(四)——事务
一.回顾事务的概念http://www.cnblogs.com/cxq1126/p/8313600.html 1.特性ACID:原子性.一致性.隔离性.持久性 2.并发问题:脏读.不可重复读.幻|虚读 ...
- (4)pyspark---dataframe清理
1.交叉表(crosstab): pandas中也有,常和pivot_table比较. 查看家庭ID与评分的交叉表: 2.处理缺失值:fillna withColumn:新增一列数据 cast : 用 ...
- sklearn学习6----交叉验证
1.kfold:自己分样本来交叉验证迭代 导入模块:from sklearn.model_selection import KFold 参数: KFold(n_splits=3, shuffle=Fa ...
- BZOJ 2260 商店购物(最小树形图)
不会最小树形图的出门左转 其实如果确定每种商品第一件的购买顺序,那么剩下的商品肯定是以最优惠价格购买的. 如何确定各种商品第一件购买时的最小价值呢? 考虑如果购买了\(a_i\)这种商品,那么就能以\ ...
- [LUOGU]3919 【模板】可持久化数组
用可持久化线段树维护可持久化数组.可持久化线段树见之前发的主席树模板 #include <iostream> #include <cstdio> #include <cs ...
- Map的四种遍历方法
1.取值遍历 for(String key:map.keySet()){ System.out.println("key="+key+"and value=" ...