树莓派采用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使用MySQLdb for Python操作数据库教程
Oct 11 Python
Python中的赋值、浅拷贝、深拷贝介绍
Mar 09 Python
python使用win32com库播放mp3文件的方法
May 30 Python
详解Python判定IP地址合法性的三种方法
Mar 06 Python
Python读取mat文件,并保存为pickle格式的方法
Oct 23 Python
python学习--使用QQ邮箱发送邮件代码实例
Apr 16 Python
Python数据类型之Set集合实例详解
May 07 Python
Python实现微信机器人的方法
Sep 06 Python
Python 实现打印单词的菱形字符图案
Apr 12 Python
Python基于requests实现模拟上传文件
Apr 21 Python
python中可以声明变量类型吗
Jun 18 Python
Pandas 数据编码的十种方法
Apr 20 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
解决中英文字符串长度问题函数
2007/01/16 PHP
PHP的关于变量和日期处理的一些面试题目整理
2015/08/10 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
JavaScript 输入框内容格式验证代码
2010/02/11 Javascript
jQuery对象和DOM对象使用说明
2010/06/25 Javascript
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
Jquery知识点三 jquery表单对象操作
2011/01/17 Javascript
js 中{},[]中括号,大括号使用详解
2011/05/12 Javascript
IE8下String的Trim()方法失效的解决方法
2013/11/08 Javascript
使用js解决由border属性引起的div宽度问题
2013/11/26 Javascript
DOM基础教程之模型中的模型节点
2015/01/19 Javascript
JavaScript分秒倒计时器实现方法
2015/02/02 Javascript
JS实现的通用表单验证插件完整实例
2015/08/20 Javascript
浅谈jQuery 中的事件冒泡和阻止默认行为
2016/05/28 Javascript
浅谈jQuery animate easing的具体使用方法(推荐)
2016/06/17 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
JS获取数组中出现次数最多及第二多元素的方法
2017/10/27 Javascript
vue2.0模拟锚点的实例
2018/03/14 Javascript
VUE基于NUXT的SSR 服务端渲染
2018/11/30 Javascript
微信小程序自定义顶部组件customHeader的示例代码
2020/06/03 Javascript
javascript实现雪花飘落效果
2020/08/19 Javascript
[01:00:25]NB vs Secret 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
[45:17]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第三场 1月9日
2021/03/11 DOTA
Python模块学习 re 正则表达式
2011/05/19 Python
Python高级应用实例对比:高效计算大文件中的最长行的长度
2014/06/08 Python
跟老齐学Python之永远强大的函数
2014/09/14 Python
Python中的字符串类型基本知识学习教程
2016/02/04 Python
python实现简单tftp(基于udp协议)
2018/07/30 Python
python3.6编写的单元测试示例
2019/08/17 Python
什么是Python变量作用域
2020/06/03 Python
详解Django中views数据查询使用locals()函数进行优化
2020/08/24 Python
Django启动时找不到mysqlclient问题解决方案
2020/11/11 Python
美国购买体育赛事门票网站:TicketCity
2019/03/06 全球购物
以设计师精品品质提供快速时尚:Mostata
2019/05/10 全球购物
Win11运行育碧游戏总是崩溃怎么办 win11玩育碧游戏出现性能崩溃的解决办法
2022/04/06 数码科技