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_文件传输)的更多相关文章

  1. Linux学习笔记14——使用fcntl实现文件锁定

    期末考试快要来了,Linux学习进度一下拉下来许多.今天学习的是文件锁定,在Linux中,实现文件锁定的方法很多,例如fcntl和lockf.下面主要是fcntl的调用. fcntl函数的原型是:in ...

  2. 批处理学习笔记14 - 把所有.mp4文件全部拷贝进统一目录

    今天下载了一套视频教程,结果发现不在同一个目录下,很乱.都放在不同文件夹下. 于是写了一个批处理来解决这个问题 @echo off for /r %%i in (*mp4) do ( copy %%i ...

  3. Python Built-in Function 学习笔记

    Python Built-in Function 学习笔记 1. 匿名函数 1.1 什么是匿名函数 python允许使用lambda来创建一个匿名函数,匿名是因为他不需要以标准的方式来声明,比如def ...

  4. Python3+Selenium3+webdriver学习笔记14(等待判断 鼠标事件 )

    !/usr/bin/env python -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记14(等待判断 鼠标事件 )'''from selenium im ...

  5. Requests:Python HTTP Module学习笔记(一)(转)

    Requests:Python HTTP Module学习笔记(一) 在学习用python写爬虫的时候用到了Requests这个Http网络库,这个库简单好用并且功能强大,完全可以代替python的标 ...

  6. Ext.Net学习笔记14:Ext.Net GridPanel Grouping用法

    Ext.Net学习笔记14:Ext.Net GridPanel Grouping用法 Ext.Net GridPanel可以进行Group操作,例如: 如何启用Grouping功能呢?只需要在Grid ...

  7. python网络爬虫学习笔记

    python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...

  8. SQL反模式学习笔记14 关于Null值的使用

    目标:辨别并使用Null值 反模式:将Null值作为普通的值,反之亦然 1.在表达式中使用Null: Null值与空字符串是不一样的,Null值参与任何的加.减.乘.除等其他运算,结果都是Null: ...

  9. golang学习笔记14 golang substring 截取字符串

    golang学习笔记14 golang substring 截取字符串golang 没有java那样的substring函数,但支持直接根据 index 截取字符串mystr := "hel ...

随机推荐

  1. ZYQAssetPickerController的使用,不错的图片选择

    import UIKit class ViewController: UIViewController,ZYQAssetPickerControllerDelegate,UIImagePickerCo ...

  2. MVC bundle配置文件模板

    bundle文件放在应用根目录,命名为  bundle.config 内容模板 <?xml version="1.0" encoding="utf-8"? ...

  3. sql获得某个时间段的数据

    CONVERT(Date, 时间字符串变量 ) between CONVERT(Date,'2015/2/10') and CONVERT(Date,'2015-3-10')

  4. C语言文件操作函数之ferror & feof & clearerr

    这些函数都是和文件读写时发生错误有关,下面一一分析: 1:ferror 原型:int ferror(FILE * fp) 作用:测试一个文件流是否被设置了错误标识符,如果是返回非 0 整数,否则返回 ...

  5. 路飞学城Python-Day37(practise)

    #1.自行创建测试数据 create database homework; use homework; # 年级表->老师表->课程表->班级表->学生表->成绩表-&g ...

  6. sklearn学习4----预处理(1)标准化

    一.[标准化]scale: 1.导入模块  from sklearn.preprocessing import scaler 2.作用:直接将给定数据进行标准化 3.使用代码 X_scaled=sca ...

  7. ES6 学习6 数组的扩展

    本章学习要点: 扩展运算符 Array.from() Array.of() 数组实例的 copyWithin() 数组实例的 find() 和 findIndex() 数组实例的 fill() 数组实 ...

  8. [luogu] P4823 [TJOI2013]拯救小矮人(贪心)

    P4823 [TJOI2013]拯救小矮人 题目描述 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以 ...

  9. Unity 代码集锦之图片处理

    1.将Texture2D保存为jpg void TestSaveImageToJPG(Texture2D buffer) { File.WriteAllBytes("F:/output.jp ...

  10. Maven学习总结(24)——Maven版本管理详解

    Maven的版本分为快照和稳定版本,快照版本使用在开发的过程中,方便于团队内部交流学习.而所说的稳定版本,理想状态下是项目到了某个比较稳定的状态,这个稳定包含了源代码和构建都要稳定. 一.如何衡量项目 ...