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. 两个NSMutableDictionary合并成一个NSMutableDictionary

    解决方案: NSMutableDictionary *targetMutableDictionary = [mutableDictionary1 copy]; [targetMutableDictio ...

  2. python中struct模块

    # #********struct模块********# # 1.按照指定格式将Python数据转换为字符串,该字符串为字节流,如网络传输时, # 不能传输int,此时先将int转化为字节流,然后再发 ...

  3. jQuery中文学习站点

    jQuery是一个快速.简单的Javascript library,它简化了HTML文件的traversing,事件处理.动画.Ajax互动,从而方便了网页制作的快速发展.jQuery是为改变你编写J ...

  4. Edge浏览器+微软小娜

  5. for循环的写法及优化

    最近这几天在研究浏览器性能的时候发现了一些小知识,在此做一总结: 其中经常用到的for循环有:正常的for循环,for in循环,for of循环等,但是对于正常的for循环可以做一下优化,使得其在执 ...

  6. javascript中构造函数的说明

    1.1 构造函数是一个模板 构造函数,是一种函数,主要用来在创建对象时对 对象 进行初始化(即为对象成员变量赋初始值),并且总是与new运算符一起使用. 1.2 new 运算符 new运算符创建一个新 ...

  7. DWZ选项卡

    <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...

  8. css——overflow

    Overflow:属性规定当前内容溢出元素框时发生的事情 1.当内容过多,元素框溢出 1)hidden:隐藏超出部分(overflow: hidden;) 2)auto:有下拉滚动条(overflow ...

  9. Extjs win

    //创建window var win = Ext.create("Ext.window.Window", { id: "myWin", title: " ...

  10. [中文] 以太坊(Ethereum )白皮书

    以太坊(Ethereum ):下一代智能合约和去中心化应用平台 翻译|巨蟹 .少平 译者注|中文读者可以到以太坊爱好者社区(www.ethfans.org)获取最新的以太坊信息. 当中本聪在2009年 ...