树莓派采用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中合并两个文本文件并按照姓名首字母排序的例子
Apr 25 Python
python操作gmail实例
Jan 14 Python
python遍历数组的方法小结
Apr 30 Python
python编程实现12306的一个小爬虫实例
Dec 27 Python
python实现K近邻回归,采用等权重和不等权重的方法
Jan 23 Python
Django restframework 源码分析之认证详解
Feb 22 Python
Python pandas RFM模型应用实例详解
Nov 20 Python
Python 矩阵转置的几种方法小结
Dec 02 Python
Python timer定时器两种常用方法解析
Jan 20 Python
Python使用ElementTree美化XML格式的操作
Mar 06 Python
浅析Python 字符编码与文件处理
Sep 24 Python
Python 实现二叉查找树的示例代码
Dec 21 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
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
2010/10/12 PHP
phpExcel导出大量数据出现内存溢出错误的解决方法
2013/02/28 PHP
php生成缩略图填充白边(等比缩略图方案)
2013/12/25 PHP
ThinkPHP中redirect用法分析
2014/12/05 PHP
PHP中iconv函数知识汇总
2015/07/02 PHP
laravel 实现根据字段不同值做不同查询
2019/10/23 PHP
javascript得到XML某节点的子节点个数的脚本
2008/10/11 Javascript
JavaScript 密码强度判断代码
2009/09/05 Javascript
JavaScript包装对象使用介绍
2013/08/29 Javascript
CSS3,HTML5和jQuery搜索框集锦
2014/12/02 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
解决webpack -p压缩打包react报语法错误的方法
2017/07/03 Javascript
详解webpack2+node+react+babel实现热加载(hmr)
2017/08/24 Javascript
vue iView 上传组件之手动上传功能
2018/03/16 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
2018/07/24 Javascript
vue插槽slot的理解和使用方法
2019/04/03 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
2019/11/07 Javascript
Python列表生成器的循环技巧分享
2015/03/06 Python
详谈python中冒号与逗号的区别
2018/04/18 Python
Python使用wget实现下载网络文件功能示例
2018/05/31 Python
OpenCV搞定腾讯滑块验证码的实现代码
2019/05/18 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
2020/03/11 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
2020/06/03 Python
python 爬取免费简历模板网站的示例
2020/09/27 Python
Stuart Weitzman欧盟:美国奢华鞋履品牌
2017/05/24 全球购物
Hobbs官方网站:英国奢华女性时尚服装
2020/02/22 全球购物
通用求职信范文模板分享
2013/12/27 职场文书
办理暂住证介绍信
2014/01/11 职场文书
企业消防安全制度
2014/02/02 职场文书
新闻专业毕业生英文求职信
2014/03/19 职场文书
门店业绩提升方案
2014/06/08 职场文书
继承权公证书范本
2015/01/23 职场文书
机器人总动员观后感
2015/06/09 职场文书
办公室卫生管理制度
2015/08/04 职场文书
学生会干部任命书
2015/09/21 职场文书
MySQL主从复制断开的常用修复方法
2021/04/07 MySQL