树莓派采用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中正则表达式的使用详解
Oct 17 Python
Python 在字符串中加入变量的实例讲解
May 02 Python
对python字典元素的添加与修改方法详解
Jul 06 Python
python实现决策树分类
Aug 30 Python
简单谈谈python基本数据类型
Sep 26 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
Feb 12 Python
更新pip3与pyttsx3文字语音转换的实现方法
Aug 08 Python
tensorflow实现训练变量checkpoint的保存与读取
Feb 10 Python
jupyter 导入csv文件方式
Apr 21 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
Sep 09 Python
Python常用扩展插件使用教程解析
Nov 02 Python
Python3+Flask安装使用教程详解
Feb 16 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
php中sql注入漏洞示例 sql注入漏洞修复
2014/01/24 PHP
PHP开发框架kohana3 自定义路由设置示例
2014/07/14 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
2016/10/28 PHP
微信公众平台开发教程⑥ 微信开发集成类的使用图文详解
2019/04/10 PHP
跟着JQuery API学Jquery 之二 属性
2010/04/09 Javascript
JavaScript 开发规范要求(图文并茂)
2010/06/11 Javascript
各情景下元素宽高的获取实现代码
2011/09/13 Javascript
JavaScript位移运算符(无符号) &gt;&gt;&gt; 三个大于号 的使用方法详解
2016/03/31 Javascript
JavaScript数据操作_浅谈原始值和引用值的操作本质
2016/08/23 Javascript
Bootstrap警告框(Alert)插件使用方法
2017/03/21 Javascript
vue组件父与子通信详解(一)
2017/11/07 Javascript
nuxt.js 缓存实践
2018/06/25 Javascript
关于js对textarea换行符的处理方法浅析
2018/08/03 Javascript
vue 利用路由守卫判断是否登录的方法
2018/09/29 Javascript
JSX在render函数中的应用详解
2019/09/04 Javascript
jQuery实现二级导航菜单的示例
2020/09/30 jQuery
详解Vue中Axios封装API接口的思路及方法
2020/10/10 Javascript
js闭包的9个使用场景
2020/12/29 Javascript
Python中的多行注释文档编写风格汇总
2016/06/16 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
2018/12/19 Python
Python中extend和append的区别讲解
2019/01/24 Python
python ---lambda匿名函数介绍
2019/03/13 Python
python+Django+pycharm+mysql 搭建首个web项目详解
2019/11/29 Python
详解从Django Allauth中进行登录改造小结
2019/12/18 Python
Python 的 f-string 可以连接字符串与数字的原因解析
2021/02/20 Python
CSS3实现类似翻书效果的过渡动画的示例代码
2019/09/06 HTML / CSS
HTML5使用DOM进行自定义控制示例代码
2013/06/08 HTML / CSS
使用canvas实现黑客帝国数字雨效果
2020/01/02 HTML / CSS
德国机车企业:FC-Moto
2017/10/27 全球购物
匡威意大利官方商店 :Converse意大利
2018/11/27 全球购物
如何利用find命令查找文件
2016/11/18 面试题
大学生就业自我鉴定
2013/10/26 职场文书
金融保险专业求职信
2014/09/03 职场文书
体育教师个人总结
2015/02/09 职场文书
银行柜员优质服务心得体会
2016/01/22 职场文书