python 3.x 学习笔记14 (socket_ssh and socket_文件传输)
生活随笔
收集整理的這篇文章主要介紹了
python 3.x 学习笔记14 (socket_ssh and socket_文件传输)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ssh服務端
import socket,osserver = socket.socket() server.bind(('localhost',6666))server.listen() conn, addr = server.accept() while True:print('等待新數據!')cmd = conn.recv(1024)if len(cmd) == 0:breakdata = 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 socketclient = socket.socket() client.connect(('localhost',6666)) while True:cmd = input('>>>:')if cmd == 0:continueclient.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 = 0receive_cmd = b''while receive_size < int(cmd_size.decode()):data = client.recv(1024)receive_size += len(data)receive_cmd += dataelse:print('接收到數據大小:',receive_size)print('數據接收完成!')print(receive_cmd.decode())?
socket文件傳輸并校驗
服務端
import socket,os,hashlibserver = socket.socket() server.bind(('localhost',6666)) server.listen() conn, addr = server.accept() while True:print('等待新數據!')cmd = conn.recv(1024)if len(cmd) == 0:breakfilename = 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,hashlibclient = socket.socket() client.connect(('localhost',6666)) while True:cmd = input('>>>:').strip()if len(cmd) == 0:continueif cmd.startswith('get'): #傳輸文件名要以get開頭如:get varclient.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 = 0filename = 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()?
轉載于:https://www.cnblogs.com/hsj-jingyu/p/8439900.html
總結
以上是生活随笔為你收集整理的python 3.x 学习笔记14 (socket_ssh and socket_文件传输)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在学习django的时候
- 下一篇: 个人作品