树莓派采用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插入排序算法的实现代码
Nov 21 Python
在Python中处理时间之clock()方法的使用
May 22 Python
Python中将字典转换为列表的方法
Sep 21 Python
利用python生成一个导出数据库的bat脚本文件的方法
Dec 30 Python
python3.0 模拟用户登录,三次错误锁定的实例
Nov 02 Python
详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别
Apr 28 Python
Python画图实现同一结点多个柱状图的示例
Jul 07 Python
python 列表推导式使用详解
Aug 29 Python
Python利用matplotlib绘制折线图的新手教程
Nov 05 Python
pycharm Tab键设置成4个空格的操作
Feb 26 Python
python OpenCV学习笔记
Mar 31 Python
Python制作春联的示例代码
Jan 22 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 json与xml序列化/反序列化
2013/10/28 PHP
PHP创建对象的六种方式实例总结
2019/06/27 PHP
Aster vs KG BO3 第二场2.19
2021/03/10 DOTA
可以文本显示的公告栏的js代码
2007/03/11 Javascript
jQuery trigger()方法用法介绍
2015/01/13 Javascript
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
js随机生成网页背景颜色的方法
2015/02/26 Javascript
JS封装cookie操作函数实例(设置、读取、删除)
2015/11/17 Javascript
AngularJS模仿Form表单提交的实现代码
2016/12/08 Javascript
AngularJS中的拦截器实例详解
2017/04/07 Javascript
jQuery实现上传图片前预览效果功能
2017/08/03 jQuery
详解用node搭建简单的静态资源管理器
2017/08/09 Javascript
JS实现的简单四则运算计算器功能示例
2017/09/27 Javascript
javascript高仿热血传奇游戏实现代码
2018/02/22 Javascript
详解Vue文档中几个易忽视部分的剖析
2018/03/24 Javascript
JavaScript Reflect Metadata实现详解
2019/12/12 Javascript
Node.js API详解之 util模块用法实例分析
2020/05/09 Javascript
Vue+Java+Base64实现条码解析的示例
2020/09/23 Javascript
微信小游戏中three.js离屏画布的示例代码
2020/10/12 Javascript
Python实现从脚本里运行scrapy的方法
2015/04/07 Python
通过数据库向Django模型添加字段的示例
2015/07/21 Python
python中数组和矩阵乘法及使用总结(推荐)
2019/05/18 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
2019/07/11 Python
python实现动态数组的示例代码
2019/07/15 Python
python爬虫豆瓣网的模拟登录实现
2019/08/21 Python
python 瀑布线指标编写实例
2020/06/03 Python
python连接mysql有哪些方法
2020/06/24 Python
在Tensorflow中实现leakyRelu操作详解(高效)
2020/06/30 Python
HTML5是什么 HTML5是什么意思 HTML5简介
2012/10/26 HTML / CSS
HTML5+CSS3实现拖放(Drag and Drop)示例
2014/07/07 HTML / CSS
Belle Maison倍美丛官网:日本千趣会旗下邮购网站
2016/07/22 全球购物
高中的自我鉴定
2013/12/16 职场文书
编辑找工作求职信分享
2014/01/03 职场文书
综治工作心得体会
2014/09/11 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
2015年社区平安建设工作总结
2015/05/13 职场文书