树莓派采用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 相关文章推荐
python3制作捧腹网段子页爬虫
Feb 12 Python
深入理解Python3中的http.client模块
Mar 29 Python
python输入错误密码用户锁定实现方法
Nov 27 Python
pygame游戏之旅 添加游戏介绍
Nov 20 Python
Python3多线程基础知识点
Feb 19 Python
详解python做UI界面的方法
Feb 27 Python
Python通用函数实现数组计算的方法
Jun 13 Python
python实时检测键盘输入函数的示例
Jul 17 Python
自定义django admin model表单提交的例子
Aug 23 Python
PyTorch在Windows环境搭建的方法步骤
May 12 Python
python线程里哪种模块比较适合
Aug 02 Python
Python控制台输出俄罗斯方块的方法实例
Apr 17 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图片处理类(水印、等比缩放、固定高宽)分享
2015/06/19 PHP
PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
2015/10/09 PHP
php获取'/'传参的值简单方法
2017/07/13 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
2019/07/22 PHP
百度 popup.js 完美修正版非常的不错 脚本之家推荐
2009/04/17 Javascript
用JQuery在网页中实现分隔条功能的代码
2012/08/09 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
2017/01/03 Javascript
vue2.0实战之基础入门(1)
2017/03/27 Javascript
JavaScript实现简单的星星评分效果
2017/05/18 Javascript
Vue如何从1.0迁移到2.0
2017/10/19 Javascript
vue中v-for加载本地静态图片方法
2018/03/03 Javascript
vue+Element-ui实现分页效果实例代码详解
2018/12/10 Javascript
React降级配置及Ant Design配置详解
2018/12/27 Javascript
JS访问对象两种方式区别解析
2020/08/29 Javascript
vue-cli3 热更新配置操作
2020/09/18 Javascript
Python制作爬虫抓取美女图
2016/01/20 Python
浅析Python中的多条件排序实现
2016/06/07 Python
对pandas里的loc并列条件索引的实例讲解
2018/11/15 Python
Python3中urlencode和urldecode的用法详解
2019/07/23 Python
如何在Django项目中引入静态文件
2019/07/26 Python
flask的orm框架SQLAlchemy查询实现解析
2019/12/12 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
pycharm 2020 1.1的安装流程
2020/09/29 Python
numpy实现RNN原理实现
2021/03/02 Python
香港连卡佛百货官网:Lane Crawford
2019/09/04 全球购物
项目经理岗位职责
2013/11/11 职场文书
2014年圣诞节促销方案
2014/03/14 职场文书
小学生暑假家长评语
2014/04/17 职场文书
教师节慰问信
2015/02/15 职场文书
2015年幼儿教育工作总结
2015/07/24 职场文书
党员干部学习三严三实心得体会
2016/01/05 职场文书
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python
手写Spirit防抖函数underscore和节流函数lodash
2022/03/22 Javascript
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/07 其他游戏
Redis主从复制操作和配置详情
2022/09/23 Redis