树莓派采用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 10 Python
python 连接sqlite及简单操作
Jun 30 Python
Python实现感知器模型、两层神经网络
Dec 19 Python
Python 面试中 8 个必考问题
Nov 16 Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
Jun 28 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
Jul 02 Python
Python爬取某平台短视频的方法
Feb 08 Python
新手必备Python开发环境搭建教程
May 28 Python
Python学习开发之图形用户界面详解
Aug 23 Python
python编程实现清理微信重复缓存文件
Nov 01 Python
Pandas数据结构之Series的使用
Mar 31 Python
python区块链实现简版工作量证明
May 25 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 array_multisort() 函数的深入解析
2013/06/20 PHP
php输出指定时间以前时间格式的方法
2015/03/21 PHP
PHP对文件夹递归执行chmod命令的方法
2015/06/19 PHP
php实现给一张图片加上水印效果
2016/01/02 PHP
thinkPHP分页功能实例详解
2017/05/05 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
2019/04/09 PHP
Javascript 写的简单进度条控件
2008/01/22 Javascript
将查询条件的input、select清空
2014/01/14 Javascript
判断日期是否能跨月查询的js代码
2014/07/25 Javascript
js实现无缝滚动特效
2015/12/20 Javascript
实例详解JavaScript获取链接参数的方法
2016/01/01 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
2016/12/27 Javascript
jQuery实现鼠标移入移出事件切换功能示例
2018/09/06 jQuery
[45:18]完美世界DOTA2联赛循环赛 PXG vs IO 第二场 11.06
2020/11/09 DOTA
Python中字典和JSON互转操作实例
2015/01/19 Python
安装Python的web.py框架并从hello world开始编程
2015/04/25 Python
Python格式化输出%s和%d
2018/05/07 Python
python实现转盘效果 python实现轮盘抽奖游戏
2019/01/22 Python
python3实现字符串操作的实例代码
2019/04/16 Python
使用Python进行防病毒免杀解析
2019/12/13 Python
windows10环境下用anaconda和VScode配置的图文教程
2020/03/30 Python
德国机场停车位比较和预订网站:Ich-parke-billiger
2018/01/08 全球购物
奥地利票务门户网站:oeticket.com
2019/12/31 全球购物
如何写出高质量、高性能的MySQL查询
2014/11/17 面试题
生产厂厂长岗位职责
2013/12/25 职场文书
房地产融资计划书
2014/01/10 职场文书
中学生旷课检讨书2篇
2014/10/09 职场文书
努力工作保证书
2015/02/28 职场文书
教导主任个人总结
2015/03/03 职场文书
银行求职自荐信范文
2015/03/04 职场文书
2014年度个人总结范文
2015/03/09 职场文书
导游词之山东八仙过海景区
2019/11/11 职场文书
详解如何在Canvas中添加事件的方法
2021/04/17 Javascript
详细介绍python类及类的用法
2021/05/31 Python
css3带你实现3D转换效果
2022/02/24 HTML / CSS
Python编程中内置的NotImplemented类型的用法
2022/03/23 Python