树莓派采用socket方式文件传输(python)


Posted in Python onJune 22, 2019

两个树莓派,在同一个局域网内,传输文件,采用socket方式。

client端代码:

import socket
import os
import hashlib
client = socket.socket() # 生成socket,连接server
ip_port =("192.168.137.210",12346) # server地址和端口号(最好是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("utf-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:",md5_sever) 
 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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python生成器的使用方法
Nov 21 Python
python中的__slots__使用示例
Feb 26 Python
python使用正则表达式分析网页中的图片并进行替换的方法
Mar 26 Python
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
Mar 30 Python
python学习之面向对象【入门初级篇】
Jan 21 Python
分享给Python新手们的几道简单练习题
Sep 21 Python
详解django中使用定时任务的方法
Sep 27 Python
python 读取竖线分隔符的文本方法
Dec 20 Python
python内存监控工具memory_profiler和guppy的用法详解
Jul 29 Python
Python 字符串类型列表转换成真正列表类型过程解析
Aug 26 Python
python实现文件的分割与合并
Aug 29 Python
python3.7环境下安装Anaconda的教程图解
Sep 10 Python
树莓派用python中的OpenCV输出USB摄像头画面
Jun 22 #Python
树莓派使用USB摄像头和motion实现监控
Jun 22 #Python
树莓派动作捕捉抓拍存储图像脚本
Jun 22 #Python
python+openCV利用摄像头实现人员活动检测
Jun 22 #Python
树莓派实现移动拍照
Jun 22 #Python
树莓派+摄像头实现对移动物体的检测
Jun 22 #Python
Python数据结构与算法(几种排序)小结
Jun 22 #Python
You might like
MySQL中create table语句的基本语法是
2007/01/15 PHP
php实现字符串首字母大写和单词首字母大写的方法
2015/03/14 PHP
PHP 数组基本操作小结(推荐)
2016/06/13 PHP
自制PHP框架之设计模式
2017/05/07 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
2017/10/07 PHP
从零开始学习jQuery (六) jquery中的AJAX使用
2011/02/23 Javascript
基于JavaScript 数据类型之Boolean类型分析介绍
2013/04/19 Javascript
YUI模块开发原理详解
2013/11/18 Javascript
使用phantomjs进行网页抓取的实现代码
2014/09/29 Javascript
jQuery中ajax的post()方法用法实例
2014/12/26 Javascript
在JavaScript中使用JSON数据
2016/02/15 Javascript
JavaScript数组实现数据结构中的队列与堆栈
2016/05/26 Javascript
微信小程序实战之仿android fragment可滑动底部导航栏(4)
2020/04/16 Javascript
Node.js 使用AngularJS的方法示例
2018/05/11 Javascript
webstorm中配置nodejs环境及npm的实例
2018/05/15 NodeJs
JS使用Dijkstra算法求解最短路径
2019/01/17 Javascript
python通过zlib实现压缩与解压字符串的方法
2014/11/19 Python
在Python的Django框架的视图中使用Session的方法
2015/07/23 Python
Python语言的面相对象编程方式初步学习
2016/03/12 Python
Django之模型层多表操作的实现
2019/01/08 Python
python 项目目录结构设置
2020/02/14 Python
django修改models重建数据库的操作
2020/03/31 Python
python中wx模块的具体使用方法
2020/05/15 Python
opencv 图像礼帽和图像黑帽的实现
2020/07/07 Python
Python爬取网页信息的示例
2020/09/24 Python
前端面试必备之html5的新特性
2017/09/05 HTML / CSS
PHP高级工程师面试问题推荐
2013/01/18 面试题
怎样声明子类
2013/07/02 面试题
生物科学系大学生的自我评价
2013/12/20 职场文书
团日活动总结
2014/04/28 职场文书
庆元旦演讲稿
2014/09/15 职场文书
公司员工离职证明书
2014/10/04 职场文书
学校节水倡议书
2015/04/29 职场文书
计划生育责任书
2015/05/09 职场文书
Maven学习----Maven安装与环境变量配置教程
2021/06/29 Java/Android
详解Vue中$props、$attrs和$listeners的使用方法
2022/02/18 Vue.js