树莓派采用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解释执行原理分析
Aug 22 Python
Python和GO语言实现的消息摘要算法示例
Mar 10 Python
简单解决Python文件中文编码问题
Nov 22 Python
python实现百万答题自动百度搜索答案
Jan 16 Python
Python爬虫框架Scrapy实例代码
Mar 04 Python
详解Django rest_framework实现RESTful API
May 24 Python
Django之模型层多表操作的实现
Jan 08 Python
python中数组和矩阵乘法及使用总结(推荐)
May 18 Python
django-allauth入门学习和使用详解
Jul 03 Python
Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】
Oct 11 Python
Python基础之字典常见操作经典实例详解
Feb 26 Python
Tensorflow全局设置可见GPU编号操作
Jun 30 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错误级别的设置方法
2013/06/17 PHP
php数组查找函数总结
2014/11/18 PHP
wordpress安装过程中遇到中文乱码的处理方法
2015/04/21 PHP
PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】
2019/06/14 PHP
php使用curl伪造浏览器访问操作示例
2019/09/30 PHP
IE iframe的onload方法分析小结
2010/01/07 Javascript
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
为jquery的ajaxfileupload增加附加参数的方法
2014/03/04 Javascript
封装属于自己的JS组件
2016/01/27 Javascript
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
Javascript中从学习bind到实现bind的过程
2018/01/05 Javascript
vue-router3.0版本中 router.push 不能刷新页面的问题
2018/05/10 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
2019/05/02 Javascript
深入学习TypeScript 、React、 Redux和Ant-Design的最佳实践
2019/06/17 Javascript
微信小程序自定义导航栏(模板化)
2019/11/15 Javascript
Vue的双向数据绑定实现原理解析
2020/02/17 Javascript
在vue中使用防抖函数组件操作
2020/07/26 Javascript
django项目搭建与Session使用详解
2018/10/10 Python
Django url,从一个页面调到另个页面的方法
2019/08/21 Python
基于Pytorch SSD模型分析
2020/02/18 Python
python关于倒排列的知识点总结
2020/10/13 Python
python tkinter实现连连看游戏
2020/11/16 Python
关于HTML5的安全问题开发人员需要牢记的
2012/06/21 HTML / CSS
医学专业大学生求职的自我评价
2013/11/27 职场文书
中学生团员自我评价分享
2013/12/07 职场文书
《阳光》教学反思
2014/02/23 职场文书
物流管理系毕业生求职信
2014/06/03 职场文书
上海世博会志愿者口号
2014/06/17 职场文书
护理学院专科毕业生求职信
2014/06/28 职场文书
九一八事变演讲稿
2014/09/05 职场文书
教师四风问题整改措施
2014/09/25 职场文书
公务员检讨书
2014/11/01 职场文书
快速学习Oracle触发器和游标
2021/06/30 Oracle
纯CSS3实现div按照顺序出入效果
2021/07/15 HTML / CSS
PostgreSQL数据库创建并使用视图以及子查询
2022/04/11 PostgreSQL