树莓派采用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基础教程之基本内置数据类型介绍
Feb 20 Python
安装Python的web.py框架并从hello world开始编程
Apr 25 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
Apr 27 Python
利用Anaconda简单安装scrapy框架的方法
Jun 13 Python
Python 判断奇数偶数的方法
Dec 20 Python
python截取两个单词之间的内容方法
Dec 25 Python
Flask框架模板继承实现方法分析
Jul 31 Python
Python实现自定义读写分离代码实例
Nov 16 Python
Python Des加密解密如何实现软件注册码机器码
Jan 08 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
Mar 20 Python
pytorch实现线性回归以及多元回归
Apr 11 Python
Python如何加载模型并查看网络
Jul 15 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 9 大缓存技术总结
2015/09/17 PHP
Yii2.0建立公共方法简单示例
2019/01/29 PHP
PHP htmlspecialchars()函数用法与实例讲解
2019/03/08 PHP
jQuery 添加/移除CSS类实现代码
2010/02/11 Javascript
Jquery截取中文字符串的实现代码
2010/12/22 Javascript
document.documentElement和document.body区别介绍
2013/09/16 Javascript
浅谈javascript属性onresize
2015/04/20 Javascript
javascript处理a标签超链接默认事件的方法
2015/06/29 Javascript
HTML5开发Kinect体感游戏的实例应用
2017/09/18 Javascript
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
Angular2学习笔记之数据绑定的示例代码
2018/01/03 Javascript
Angular @HostBinding()和@HostListener()用法
2018/03/05 Javascript
JS解惑之Object中的key是有序的么
2019/05/06 Javascript
webpack4 SplitChunks实现代码分隔详解
2019/05/23 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
2019/09/17 Javascript
React学习之受控组件与数据共享实例分析
2020/01/06 Javascript
python开发中module模块用法实例分析
2015/11/12 Python
Python多线程实现同步的四种方式
2017/05/02 Python
对python实时得到鼠标位置的示例讲解
2018/10/14 Python
在python中以相同顺序shuffle两个list的方法
2018/12/13 Python
Python对ElasticSearch获取数据及操作
2019/04/24 Python
分享一个python的aes加密代码
2020/12/22 Python
Python实现Excel自动分组合并单元格
2021/02/22 Python
pytorch 中forward 的用法与解释说明
2021/02/26 Python
美国杂志订阅折扣与优惠网站:Magazines.com
2016/08/31 全球购物
美国家居装饰购物网站:Amanda Lindroth
2020/03/25 全球购物
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
销售代表求职自荐信
2013/10/01 职场文书
项目建议书范文
2014/05/12 职场文书
2014年学校党建工作汇报材料
2014/11/02 职场文书
汽车转让协议书
2015/01/29 职场文书
公务员个人总结
2015/02/12 职场文书
2015年党务公开工作总结
2015/05/19 职场文书
初二英语教学反思
2016/02/15 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书
MySQL 那些常见的错误设计规范,你都知道吗
2021/07/16 MySQL