树莓派采用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正常时间和unix时间戳相互转换的方法
Apr 23 Python
Python实现比较两个列表(list)范围
Jun 12 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
Dec 03 Python
Python设计模式之门面模式简单示例
Jan 09 Python
对pandas中apply函数的用法详解
Apr 10 Python
python 模拟银行转账功能过程详解
Aug 06 Python
python实现猜拳小游戏
Apr 05 Python
python中enumerate() 与zip()函数的使用比较实例分析
Sep 03 Python
Python 中使用 PyMySQL模块操作数据库的方法
Nov 10 Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
Jan 20 Python
Python+Appium实现自动化测试的使用步骤
Mar 24 Python
python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法
Nov 05 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实现多条件查询实例代码
2010/07/17 PHP
snoopy 强大的PHP采集类使用实例代码
2010/12/09 PHP
PHP使用header()输出图片缓存实例
2014/12/09 PHP
php获取YouTube视频信息的方法
2015/02/11 PHP
javascript 支持ie和firefox杰奇翻页函数
2008/07/22 Javascript
JavaScript之编码规范 推荐
2012/05/23 Javascript
Javascript中的delete介绍
2012/09/02 Javascript
js获取当月最后一天实例代码
2013/11/19 Javascript
Jquery仿IGoogle实现可拖动窗口示例代码
2014/08/22 Javascript
JS实现点击颜色块切换指定区域背景颜色的方法
2015/02/25 Javascript
jQuery的end()方法使用详解
2015/07/15 Javascript
浅谈JS中json数据的处理
2016/06/30 Javascript
Bootstrap实现的表格合并单元格示例
2018/02/06 Javascript
VUE的history模式下除了index外其他路由404报错解决办法
2019/08/21 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
小程序实现tab标签页
2020/11/16 Javascript
Python的string模块中的Template类字符串模板用法
2016/06/27 Python
Python爬虫爬取美剧网站的实现代码
2016/09/03 Python
python负载均衡的简单实现方法
2018/02/04 Python
Python实现上下班抢个顺风单脚本
2018/02/07 Python
Python爬虫实现全国失信被执行人名单查询功能示例
2018/05/03 Python
python爬虫之快速对js内容进行破解
2019/07/09 Python
Keras预训练的ImageNet模型实现分类操作
2020/07/07 Python
python+selenium自动化实战携带cookies模拟登陆微博
2021/01/19 Python
CSS3制作轮播图的一种方法
2019/11/11 HTML / CSS
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
HTML5 直播疯狂点赞动画实现代码 附源码
2020/04/14 HTML / CSS
德国圣伯纳德草药屋:Kräuterhaus Sanct Bernhard(有中文站)
2018/08/05 全球购物
Chemist Warehouse中文网:澳洲连锁大药房
2021/02/05 全球购物
机电一体化应届生求职信范文
2014/01/24 职场文书
校本教研活动总结
2014/07/01 职场文书
单位作风建设剖析材料
2014/10/11 职场文书
十佳少年事迹材料
2014/12/25 职场文书
门球健将观后感
2015/06/16 职场文书
宾馆卫生管理制度
2015/08/06 职场文书
Python 制作自动化翻译工具
2021/04/25 Python