树莓派采用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实现在windows服务中新建进程的方法
Jun 30 Python
使用pandas中的DataFrame数据绘制柱状图的方法
Apr 10 Python
python3+PyQt5+Qt Designer实现扩展对话框
Apr 20 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
Aug 24 Python
Python 通过截图匹配原图中的位置(opencv)实例
Aug 27 Python
ubuntu上安装python的实例方法
Sep 30 Python
python 多进程队列数据处理详解
Dec 23 Python
基于MSELoss()与CrossEntropyLoss()的区别详解
Jan 02 Python
python利用opencv实现SIFT特征提取与匹配
Mar 05 Python
Python3爬虫中识别图形验证码的实例讲解
Jul 30 Python
python数据可视化使用pyfinance分析证券收益示例详解
Nov 20 Python
Python通用验证码识别OCR库ddddocr的安装使用教程
Jul 07 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
重料打造自己的“宝马”---第三代
2021/03/02 无线电
环境会对咖啡种植有什么影响
2021/03/03 咖啡文化
PHP实现对png图像进行缩放的方法(支持透明背景)
2015/07/15 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
2019/10/15 PHP
js阻止冒泡及jquery阻止事件冒泡示例介绍
2013/11/19 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
jQuery焦点图插件SaySlide
2015/12/21 Javascript
简单实现bootstrap选项卡效果
2017/02/08 Javascript
AngularJS点击添加样式、点击变色设置的实例代码
2017/07/27 Javascript
IScroll5实现下拉刷新上拉加载的功能实例
2017/08/11 Javascript
jQuery第一次运行页面默认触发点击事件的实例
2018/01/10 jQuery
element ui 对话框el-dialog关闭事件详解
2018/02/26 Javascript
vue 列表页跳转详情页获取id以及详情页通过id获取数据
2019/03/27 Javascript
Vue实现购物车详情页面的方法
2019/08/20 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
简单的Python2.7编程初学经验总结
2015/04/01 Python
Python实现短网址ShortUrl的Hash运算实例讲解
2015/08/10 Python
python搭建虚拟环境的步骤详解
2016/09/27 Python
对Python中的条件判断、循环以及循环的终止方法详解
2019/02/08 Python
Python集中化管理平台Ansible介绍与YAML简介
2019/06/12 Python
python 批量添加的button 使用同一点击事件的方法
2019/07/17 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
2020/02/18 Python
python算的上脚本语言吗
2020/06/22 Python
瑞贝卡·明可弗包包官网:Rebecca Minkoff
2016/07/21 全球购物
日本快乐生活方式购物网站:Shop Japan
2018/07/17 全球购物
优秀通讯员事迹材料
2014/01/28 职场文书
办公自动化专业大学生职业规划书
2014/03/06 职场文书
升学宴主持词
2014/04/02 职场文书
协议书模板
2014/04/23 职场文书
党员批评与自我批评(5篇)
2014/09/23 职场文书
欢迎家长标语
2014/10/08 职场文书
大学生学期个人总结
2015/02/12 职场文书
2015年员工工作表现评语
2015/03/25 职场文书
公司仓库管理制度
2015/08/04 职场文书
windows server2008 开启端口的实现方法
2022/06/25 Servers