python 3.x 學習筆記13 (socket_ssh and socket_文件傳輸)

来源:https://www.cnblogs.com/hsj-jingyu/archive/2018/02/10/8439900.html
-Advertisement-
Play Games

ssh服務端 ssh客戶端 socket文件傳輸並校驗 服務端 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()

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Chip Factory Time Limit: 18000/9000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 4414 Accepted Submission(s): 1954 ...
  • 繼承使用繼承優化設計使用:將重覆的代碼抽取到父類中繼承的優點和實現優點:方便修改代碼減少代碼量 子類和父類關係是is-a的關係(可以有多個子類,但只能有一個父類) 如何使用繼承?class Pet {/公共的屬性和方法}class Dog extends Pet {/子類特有的屬性和方法}class ...
  • 一、巴什博弈(Bash Game) 有n個物品,兩個人輪流從這堆物品中取物,規定每次至少取一個,最多取m個,最後取光者得勝。 顯然,如果n=m+1,那麼由於一次最多只能取m個,所以,無論先取者拿走多少個,後取者都能夠一次拿走剩餘的物品,後取者取勝。因此我們發現瞭如何取勝的法則: 如果n=(m+1)* ...
  • 明明一天都想著一會兒就更新,可是總是忘了,今天公司的項目上線倒是有點忙 這個月不是很順啊, 狗被金毛把腿咬了兩個洞,花錢不說,還不能洗澡,看著也怪心疼的, 摩托車忘了開U鎖就起步,導致鏈條蓋碎了, 公司加班太多缺少睡眠又莫名其妙的撞了頭,起了一個大包,裡外頭疼了好幾天, 沒有14薪了,只有13薪 看 ...
  • 接下來的幾篇博客,想記錄一下通過學習坦克大戰項目來循序漸進的學習Java基礎。主要是為了鞏固基礎知識,當然學習編程重要的還是多敲,問題通常是在敲代碼的過程中發現的,積累也是在敲代碼中尋求的經驗。這個坦克大戰項目是利用Java圖形界面來做的,比較簡陋。但是,在不斷的往裡面加功能的時候,可以學到很多知識 ...
  • 今天我給大家介紹的是python中的Number變數,與c++,java有些不同,下麵讓來為大家介紹: 在python中是不用聲明變數類型的,不過在使用變數前需要對其賦值,沒有值得變數是沒有意義的,編譯器也不會通過 一 : 整型 int: int 在python中的用法與c++大致是一樣的: a=1 ...
  • 上面測試,用了Junit 下邊枚舉 枚舉是什麼? 相當於 有點像單例模式,只造出一個對象供外界使用;這個枚舉一下造出好多個供使用,造出的對象不能改變 枚舉出來的ABCDE都是可以用類名.直接調用的對象,對象可以賦值,和調用其成員方法 ...
  • Java中成員訪問許可權 Java中的訪問許可權控制符有四個:作用域lxx__當前類____同一package___子孫類____其他package publiclxx___√lxx__lxx___√lxx__lxx__√lxx__lxx___√ protected___√lxx__lxx___√___ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...