樹莓派採用socket方式檔案傳輸(python)

2022-09-29 16:36:11 字數 3045 閱讀 8484

兩個樹莓派,在同乙個區域網內,傳輸檔案,採用socket方式。

client端**:

import socket

import os

import hashlib

client = socket.socket() # 生成socket,連線server

ip_port =("192.168.137.210",12程式設計客棧346) # servewgxhswnrr位址和埠號(最好是10000以後)

client.connect(ip_port) # 連線

print("伺服器已連線")

while true:

content = input(">>")

if len(content)==0: continue # 如果傳入空字元會阻塞

if content.startswith("get"):

client.send(content.encode("utf-8")) # 傳送和接收都是bytes型別

# 1.先接收長度,建議8192

server_response = client.recv(1024)

file_size = int(server_response.decode("utf-8"))

print("接收到的大小:",file_size)

# 2.接收檔案內容

client.send("準備好接收".encode("ut程式設計客棧f-8")) # 確認接收

filename = "new" + content.split(" ")[1]

f = open(filename, "wb")

received_size = 0

m = hashlib.md5()

while received_size < file_size:

size = 0 # 準確接收資料大小,解決粘包

if file_size - received_size >1024: # 多次接收

size = 1024

else: # 最後一次接收完畢

size = file_size - received_size

data = client.recv(size) # 多次接收內容,接收大資料

data_len = len(data)

received_size += data_len

print("已接收:", int(received_size/file_size*100), "%")

m.update(data)

f.write(data)

f.close()

print("實際接收的大小:", received_size) # 解碼

# 3.md5值校驗

md5_sever = client.recv(1024).decode("utf-8")

md5_client = m.hexdigest()

print("伺服器發來的md5:",md

print("接收檔案的md5:",md5_client)

if md5_sever == md5_client:

print("md5值校驗成功")

else:

print("md5值校驗失敗")

client.close()

這乙個**是用來的到檔案的:get filename

需要說明的是:得到的檔案是存在於client.py的同一目錄。

下面是server端:

import socket

import os

import程式設計客棧 hashlib

server = socket.socket()

server.bind(("192.168.137.96", 12346)) # 位址與埠

server.listen(5)

print("等待連線..")

while true:

conn, addr =server.accept() # 等待連線

print("conn:", conn, "\naddr:", addr) # conn連線例項

while true:

data =conn.recv(1024) # 接收

if not data: # 客戶端已斷開

print("客戶端斷開連線")

break

print("收到的命令:", data.decode("utf-8"))

cmd, filename = data.decode("utf-8").split(" ")

if cmd=="get":

if os.path.isfile(filename): # 判斷檔案存在

size = os.stat(filename).st_size

#獲取檔案大小

conn.send(str(size).encode("utf-8")) # 傳送資料長度

print("傳送的大小:", size)

conn.recv(1024) # 接收確認

m = hashlib.md5()

f = open(filename, "rbname")

for line in f:

conn.send(line) # 傳送資料

m.update(line)

f.close()

md5 = m.hexdigest()

conn.send(md5.encode("utf-8"))

print("md5:", md5)

server.close()

檔案的傳輸是單向的,也就是說,只有client端才能在server端中獲取檔案,但是,獲取的檔案也只能是與server同乙個目錄下。

執行命令:

python client.py

python server.py

看個人習慣,也可以直接開啟.py檔案

最終效果圖:

本文標題: 樹莓派採用socket方式檔案傳輸(python)

本文位址:

樹莓派採用翔雲實現人臉識別

1.通過翔雲平台購買人臉識別介面 個人中心服務列表檢視剩餘介面次數 2.c語言程式訪問介面 需要安裝支援ssl的curl庫,交叉編譯curl庫 1 c語言程式訪問介面 include include include include include include include include de...

樹莓派常見幾種登入方式

1.2.1 裝置破解 預設情況,樹莓派的串列埠和藍芽連線 想辦法斷開藍芽連線,把串列埠用來資料通訊 a.樹莓派的啟動過程,字元 b.串列埠登入樹莓派 1.3 通過網路登入樹莓派 1.3.1 讓樹莓派入網 修改sudo nano etc wpa supplicant wpa supplicant.co...

樹莓派 檔案傳輸

嘗試了這幾種方式,sftp是成功的。其他兩個有點問題 sftp,nfs,tftp 注意 虛擬機器網路設定要配置成bridged模式 sftp在樹莓派預設是開啟的,在windows host上使用winscp.linux 虛擬機器作為server.但是在樹莓派上 nfs common 有如下的問題,沒...