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 ...
随机推荐
- crawler4j多线程爬虫统计分析数据
该事例演示了如何在多线程中统计和分析数据: 首先建一个状态实体类CrawlStat: package com.demo.collectingData; /** * 爬虫状态实体类 统计爬虫信息 * @ ...
- JavaScript基础知识-正则表达式
正则表达式 作用:定义一个特定的验证字符串内容规则的表达式 注:正则表达式并不是JavaScript独有的:JavaScript支持正则表达式 var a = { }; // 定义一个空对象 ...
- dragView 屏幕拖拽并且弹出菜单的控件
dragView 因项目新需求需要添加一个屏幕拖拽按钮可以弹出菜单的控件,因为不是我做的闲来无事写一个demo吧 可能存在一些小bug(毕竟就写了几个小时)兄弟姐妹们理解思路就行 具体的可以自己调试一 ...
- .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
最近在项目中与别的公司对接业务,对方是Java语言,需要调用对方的WebServices,结果常规的添加web引用的方法可以传过去值,但是返回值为null 查了很多资料,没有解决方法 思考应该是.Ne ...
- 相对URL:协议名跨域的一种处理方式
问题现象 当页面地址协议与页面内请求地址协议不一致(不都是https或不都是http)时,往往请求会被拦截.控制台提示: 原因 浏览器对于JavaScript的同源策略的限制,简言之就是我们常说的跨域 ...
- Linux赛车游戏 SuperTuxKart 1.0 正式发布
SuperTuxKart是一款受Mario Kart(马里奥赛车)启发并以Linux/Tux为主题的开源赛车游戏,经过12年多的开发,已经达到1.0版本.并且确定这个版本确实是一个重要的里程碑. Su ...
- qt quick中qml编程语言
Qt QML 入门 — 使用C++定义QML类型 发表于 2013 年 3 月 11 日 注册C++类 注册可实例化的类型 注册不实例化的QML类型 附带属性 注册C++类 注册可实例化的类型 如 ...
- qt 摄像头程序
http://www.oschina.net/code/snippet_124925_3789?p=3#comments http://www.codesoso.net/Search?q=qt+%C9 ...
- python 添加自定义库
首先,写一个库文件aaa.py 格式,在python安装目录下面创建一个空的文件夹命名Function 或者其他文件名, 然后将文件保存在python 安装目录下面的一个Function文件夹下面. ...
- intellij idea 13&14 插件推荐及高速上手建议 (已更新!)
早些年 在外企的时候,公司用的是intellij idea ,当时也是从eclipse.MyEclipse转过去的非常是不习惯. 用了一周明显感觉爱上它了.由于它非常智能,并且能纠正你非常多不好的习惯 ...