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. roboware-studio 使用教程

    一.创建工作区 1.1 新建工作区 1.2 选择路径并添加工作区的名字 catkin_ws 二.创建程序包 创建ROS包并添加依赖 my_package roscpp std_msgs 三.添加并编写 ...

  2. POJ 2239 匈牙利算法

    思路:最大匹配 也是很裸的一道题-. // by SiriusRen #include <cstdio> #include <cstring> #include <alg ...

  3. docker初安装的血泪史

    最近docker很火,不管是朋友圈内还是公司内聊天都离不开docker,于是对docker产生了极大的好奇心,凭着一颗程序猿的好奇心开始了docker的安装血泪史. 首先我有一台从公司退役的本本x22 ...

  4. Thingworx SDK开发自定义Widget

    Thingworx自带的图表数量有限,样式也很有限,在echarts上看到了这样一个非常简单的图表,下面将做一个简单的静态引入示范 首先创建Thingworx项目 然后右键ui新建widget 自动生 ...

  5. SQL基本语句:2.基本表

    SQL基本表的增删改

  6. [置顶] 使用 maven 插件 maven-shade-plugin 对可执行 java 工程及其全部依赖 jar 进行打包

    作者:chenzhou123520 出处:http://chenzhou123520.iteye.com/blog/1706242 使用 maven 插件 maven-shade-plugin 对 j ...

  7. python的装饰器,迭代器用法

    装饰器. 装饰器实际就是一个函数 定义:在不改变内部代码和调用方式的基础上增加新的功能 了解装饰器需要了解3个内容: 1.函数即变量 2.高阶函数 1).把一个函数名当作实参传给另一个函数 2).返回 ...

  8. minicom不能连arm-linux开发板的问题终于解决了!

    前一段时间一直有个问题困扰着我,大概是一次重新编译过kernel之后, gentoo上的minicom就不能和windows和开发板通信了. 为了解决这个问题,我把glibc/kernel/minic ...

  9. Git学习总结(10)——git 常用命令汇总

    1.git 基本概念: 工作区:改动(增删文件和内容) 暂存区:输入命令:git add 改动的文件名,此次改动就放到了'暂存区'(新增的文件) 本地仓库(简称:本地):输入命令:git commit ...

  10. shell 键盘录入和运算

    一.read 命令,从键盘读入数据,赋给变量 1.脚本代码 #!/bin/sh read arg1 arg2 echo "第一个参数: $arg1" echo "第二个参 ...