Twised 文件传输协议设计(二)

终于有人将TWI(串行通讯接口)给讲通了! TWI串口通讯模式! 阅读详情

接上篇,代码里面文件发送和接受全部写道一起了比较乱

最近再次整理了一下

服务端 协议代码 

class Status:
	RECV='RECV'           #接受文件状态
	SEND='SEND'          #发送文件状态
	DONE='DONE'         #当前文件传输完成
	WAIT='WAIT'           #等待对方响应)
	LOOP='LOOP'          #循环发送字节流
	ABORT='ABORT'       #终止发送 

		

class  FileTranServerProtocol(LineReceiver):
	"""socket文件传输协议"""
	#----------------------------------------------------------------------
	blocksize=65536
	def __init__(self):
		self.fp=None
		self.totalsize=0
		self.rest=0#这个用来扩展断点功能
		self.mystatus=None
		self.yourstatus=None

	#根据命令行 查找对应的命令
	def lineReceived(self, line):
		arr=line.split(':') 
		cmd=line[0:4]
		param=pickle.loads(line[4:])
		func=getattr(self,'do_'+cmd)
		func(param)
	
	#处理 下载文件 命令	                    
	def do_STOR(self,param):
		serverpath,rest=param[0],param[1]
		serverpath=os.path.join(Cfg.c_sharefilesdir,serverpath)
		self.fp=open(serverpath,'rb')
		if rest and rest<os.path.getsize(serverpath):self.fp.seek(rest)
		self.STAT(Status.SEND)
	
	def dataReceived(self,data):
		LineReceiver.dataReceived(self,data)
			
	#告诉对方 我的状态
	def STAT(self,status):
		print 'tell other '+status
		self.mystatus=status 
		self.sendLine('STAT'+pickle.dumps(status))
		
	def do_STAT(self,param):
		print 'tell me '+param
		self.yourstatus=param
		#接受方告诉我们发送字节流
		if self.yourstatus==Status.LOOP:
			while 1:
				buf=self.fp.read(self.blocksize)
				if not buf:break
				self.transport.write(buf)
			self.transport.loseConnection()
		
	def connectionLost(self, reason):
		if self.fp:self.fp.close()
		

def RunFileTran(reactor):
	f=Factory()
	f.protocol=FileTranServerProtocol
	reactor.listenTCP(8200,f)

if __name__=='__main__':
	from twisted.internet import reactor
	RunFileTran(reactor)
	reactor.run()
	

客户端协议和测试代码

class  FileTranClientProtocol(LineReceiver):
	"""socket文件传输协议"""
	#----------------------------------------------------------------------
	def __init__(self,serverpath,localpath,rest,callBack=None):
		self.fp=None
		self.mystatus=None
		self.yourstatus=None
		self.callBack=callBack
		self.rest=rest
		self.localpath=localpath
		self.serverpath=serverpath
		
	#根据命令行 查找对应的命令
	def lineReceived(self, line):
		arr=line.split(':') 
		cmd=line[0:4]
		param=pickle.loads(line[4:])
		func=getattr(self,'do_'+cmd)
		func(param)
	
	def dataReceived(self,data):	
		#我处在接受文件 状态 对方处在发送文件状态		
		if self.mystatus==Status.LOOP:
			print 'get data '+str(len(data))
			self.fp.write(data)
			if self.callBack:self.callBack(len(data))
		else:
			#处理命令行
			LineReceiver.dataReceived(self,data)	

	def 	Run(self):
		self.fp=open(self.localpath,'ab') if self.rest else open(self.localpath,'wb')
		self.sendLine('STOR'+pickle.dumps((self.serverpath,self.rest)))
		self.STAT(Status.RECV)

	#告诉对方 我的状态
	def STAT(self,status):
		print 'tell other '+status
		self.mystatus=status 
		self.sendLine('STAT'+pickle.dumps(status))
		
	def do_STAT(self,param):
		print 'tell me '+param
		self.yourstatus=param
		#告诉发送端开始文件流循环
		if self.yourstatus==Status.SEND and self.mystatus==Status.RECV:
			self.STAT(Status.LOOP)
			
	def connectionMade(self):
		self.Run()
		
	def connectionLost(self, reason):
		if self.fp:self.fp.close()
if __name__=='__main__':
	from twisted.internet import reactor
	def GetFile(serverpath,localpath,rest=0):
		f=FileTranClientFactory(serverpath,localpath,rest=0)
		reactor.connectTCP("localhost", 8200,f)
	GetFile('3af82f21-94db-4231-915c-f2a72195c680.exe','D:/1.exe')
	reactor.run()

传入不同的rest值可以 设置断点下载

运行后成功将共享文件夹里面的内容下载到D盘了,以后要是加文件夹下载功能估计又要吐血了快哭了



NRF52832学习笔记——使用TWI接口进行通信(嵌入式) 在本篇学习笔记中,我们将深入研究NRF52832的TWI(Two-Wire Interface)接口以及如何使用该接口进行通信。在本篇学习笔记中,我们深入研究了NRF52832的TWI接口以及如何使用该接口进行通信。我们简要介绍了TWI接口的基本原理,并提供了相关的源代码示例,帮助读者快速上手TWI接口的使用。在此示例中,我们使用了NRF5 SDK提供的nrf_twi库函数来配置TWI引脚和频率,并启用TWI。在此示例中,我们使用nrf_twi_mode_set函数设置TWI的工作模式。 阅读详情

相关推荐

7. 网络通信原理基础

本文介绍了网络安全中的网络通信原理,重点解析了OSI七层模型及其各层功能。OSI模型由国际标准化组织(ISO)于1984年颁布,旨在统一网络通信标准,提高设备互操作性。文章详细说明了物理层到应用层的功能划分,包括物理层的传输介质(双绞线、光纤等)、数据链路层的MAC地址寻址、网络层的IP地址路由选择等。同时介绍了PDU协议数据单元的概念,列举了各层常见协议如TCP/UDP、IP/ARP等,并阐述了数据封装与解封装的过程。最后对物理层的有线/无线传输介质进行了分类说明,特别是双绞线的类型与性能参数。全文系统性

这个家伙看起来很懒,只想把你留下来哦 919

一种安全高效的文件传输协议设计

介绍 随着3G、4G、5G的发展,使得文件传输变得轻而易举,我们可以随时随地地进行文件传输,与好友之间,与云服务器之间。文件的传输,意味着一个数据信息需要在网络上暴露,当受到恶意攻击时,导致数据泄露,造成一些不可磨灭的灾难。因此,文件的安全传输是一个值得探讨的问题。 1、加密技术,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已知的加密信息,但因不知解密的方法,仍然无法了解信息内...

qq_25956141的博客 2588

文件传输协议的简单设计与实现

使用Socket进行Client/Server程序设计的一般连接过程是这样的:Server端Listen(监听)某个端口是否有连接请求,Client端向Server端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Client端都可以通过Send,Write等方法与对方通信。   对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:   (1) 创建Socket;   (2) 打开连接到Socket的输入/出流;   (3) 按照一定的协议对Socket进行读/写操作;   (4) 关闭Socket.   第三步是程序员用来调用Socket和实现程序功能的关键步骤,其他三步在各种程序中基本相同。

系统设计——大文件传输方案设计

大文件传输是指通过网络将体积较大的文件从一个位置发送到另一个位置的过程。这些文件可能包括高清视频、大型数据库、复杂的软件安装包等,它们的大小通常超过几百兆字节(MB)甚至达到几个吉字节(GB)或更大。大文件传输可能面临一些挑战,比如传输速度慢、网络不稳定导致的传输中断、以及存储空间的限制等。为了有效地传输大文件,可能需要使用特定的技术,比如压缩文件以减少传输数据量、使用高速网络连接、或者采用分块传输技术来提高传输的稳定性和效率。

庄小焱 3077

ping程序设计和文件传输协议的简单设计

PING程序是我们使用的比较多的用于测试网络连通性的程序。课程设计中选取PING程序的设计,其目的是希望同学们通过PING程序的设计,能初步掌握TCP/IP网络协议的基本实现方法,对网络的实现机制有进一步的认识。 文件传输协议的简单设计与实现:用socket 编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c),该程序应能实现下述命令功能: get:取远方的一个文件 put:传给远方一个文件 。。。。。。 包括源程序和可运行的exe文件,绝对可以运行

TWI协议C语言编程

TWI通信协议C语言源代码。希望能帮助电子爱好者。

TWI协议

发送重复起始条件后,总线仍处于“busy”状态,一直到总线出现终止条件。

m0_61973119的博客 1607

TWI基本知识

TWI总线接口又称为两线串行总线接口,是目前世界上应用广泛的一种串行外委扩展总线接口

MCU通信技术:SPI UART TWI 三种串行总线协议

1.SPI(Serial Peripheral Interface:串行外设接口)  管脚:SS/SCK/MOSI(SDO)/MISO(SDI)  结构:一个始终发生器、两个移位寄存器(主从各一个);   UART TWI 三种串行总线协议的区别" name="" alt

5882

IPD(集成产品开发)管理之道

IPD,是集成产品开发(Integrated Product Development)的缩写,它是集成了众多管理模型和理论、众多企业最佳管理实践的一整套体系,可以帮助企业快速响应市场变化、缩短产品上市时间、减少资源浪费、提高生产力,最终取得商业成功。IPD的思想最早来源于美国PRTM公司出版的《产品及生命周期优化法》一书中,该书详细描述了IPD模式所包含的各个方面。但IPD在中国的普及,源于IBM和华为的推行使用。IPD作为一套先进的产品研发管理模式,其成功的基础是功能部门和各团队之间的密切配合。

钢镚·真的博客 2709

Windows安装ros2(Jazzy版本+win10/win11)-1.配置windows终端

更高版本的terminal可能设置里更加丰富, 有默认以管理员身份启动的选项等,可自行配置。打开微软应用商店, 在其中搜索并下载 Terminal 即可(注意别挂梯子)下载并安装, 安装的位置自行替换,建议别放到系统盘中。点击任务栏中的搜索, 输入store。

weixin_48398592的博客 1452

Twised 文件传输协议设计

最近在做一个文档的管理系统,用ftp的话 权限 不够,有的目录无权访问。 网上找了一些,都不能够满足业务需要,只有自己来设计一个通信协议来传输文件 设计思路是 切换 服务端和 客户端 的状态来完成文件发送(其实点对点用这个协议也可以) 下面协议测试代码,将D:/book.pdf 发送到D:/1.pdf  后续还需要扩展断点 相关功能 服务端 # -*- coding: gbk -*-

xugangjava的专栏 2971

奇迹mu服务端DATA文件解析:从基础配置到高级玩法

本文深入解析奇迹MU服务端DATA文件的核心配置与高级玩法,涵盖基础设置、怪物AI系统、技能战斗机制、副本事件管理及物品商城定制。通过详细示例和实用技巧,帮助开发者掌握从经验倍率调整到动态事件触发的全方位配置方法,实现个性化的私服搭建与运营。

weixin_29254673的博客 528

系统架构设计师考点—计算机网络

(1)无屏蔽双绞线(UTP): 价格低,安装简单,但可靠性相对较低,分为CAT (3类UTP. 速率为10Mb/s)、CAT4(4类UTP,与3类差不多,无应用)、CAT5(5类UTP,速率为100Mb/s. 用于快速以太网)、CAT5E (超5类UTP,速率为1000Mb/s)、CAT6(6类UTP,用来替代CATSE。传输距离可达5km。①TCP:整个TCP/IP协议族中最重要的协议之一,在IP协议提供的不可靠数据的基础上,采用了重发技术,为应用程序提供了一个可靠的、面向连接的、全双工的数据传输服务。

qq_51638177的博客 766

高云FPGA系列教程(7):ARM GPIO外部中断

高云GN1NSR-4C共有16个GPIO,每个GPIO可配置成输入或输出模式,支持中断输入,触发方式可选择:上升沿、下降沿、高电平、低电平触发。中断优先级可通过NVIC进行设置,支持 0-7 级可编程中断优先级。

whik1194的博客 1375

数据本体论如何指导数仓建模?

数据本体论指导数仓建模的核心在于构建业务语义与数据结构的桥梁。该方法从业务域中抽象标准化知识体系,包含核心概念、属性、关系和规则五大要素,并将其映射为分层数仓模型。通过"业务本体梳理→本体建模→模型映射→治理迭代"的流程,实现数仓从"结构存储"到"语义载体"的升级。相比传统建模,该方法能解决语义不一致、跨域融合难等问题,使数仓具备更好的可扩展性和业务对齐性。实践表明,以数据本体论为指导的数仓建模能显著提升数据资产的可理解性和复用价值。

石榴姐yyds 393

计算机三级网络技术中常出现的一些协议、设备及技术缩写

计算机三级网络技术中常出现的一些协议、设备及技术缩写

刘躺的博客 1588

小孙学变频学习笔记(二)变频器的逆变电路

本文主要介绍了变频器中逆变电路的核心器件IGBT及其应用。IGBT是一种电压控制型三端半导体开关器件,具有开关频率高、功耗低的优点,在变频器中仅使用截止和饱和导通状态。文章详细分析了IGBT的结构特性、与晶闸管的区别,以及由四个IGBT组成的直流转交流逆变电路原理。重点阐述了IGBT并联反向二极管的作用:提供电流反向通路、避免反向电压损坏器件、提高开关效率等。最后提供了相关学习参考网址供读者进一步研究。

qq_43091070的博客 1194

three.js CubeMapNode 深度解析:TSL 中自动完成等距柱状投影到立方体贴图的环境贴图转换

`CubeMapNode` 是 three.js 节点系统(TSL,Three Shading Language)中的一个实用节点,用于在着色器构建阶段自动把等距柱状投影(equirectangular)格式的环境贴图转换为立方体贴图(cube map)格式,并在每帧渲染时自动更新纹理引用。读完本文,你可以掌握 `CubeMapNode` 的构造函数、属性与更新时机(`updateBeforeTy

gitblog_00737的博客 915

【软件系统架构】系列六:MBSE(基于模型的系统工程)

基于模型的系统工程(MBSE)是一种以模型为核心的系统工程方法论,通过结构化、可视化的模型取代传统文档,实现从需求到验证的全生命周期管理。MBSE采用SysML建模语言,包含需求、功能、架构和验证四大要素,支持自动追踪、仿真分析和代码生成。相比文档式工程,MBSE具有变更影响自动分析、跨团队协作和高可视化等优势,广泛应用于航空航天、汽车电子等领域。典型开发流程包括需求建模、行为建模、架构建模等阶段,配合MagicDraw、Cameo等工具链实现。MBSE正与数字孪生、AI技术融合,推动自动化建模和智能验证的

moton2017的博客 2782

学Simulink--基于新能源与储能系统的场景实例:压缩空气储能(CAES)系统热力学建模

本文介绍了使用Simulink对压缩空气储能(CAES)系统进行热力学建模的详细流程。重点讲解了系统各模块的设计方法,包括压缩机、储气装置、膨胀机和热交换器等核心组件的参数设置与计算模型。文章还提供了控制策略设计和仿真运行的具体步骤,通过建立MATLAB函数计算关键参数变化,并分析了系统性能评估指标。该建模方法可用于验证CAES系统的设计有效性,并为优化储能效率提供技术参考。全文采用模块化设计思路,为新能源与储能系统的仿真研究提供了实用案例。

xiaoheshang_123的博客 298

计算机网络复习笔记

计算机网络概念:计算机网络是一个将分散的,具有独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。计算机网络就是互连的,自治的计算机系统的集合。

qq_42171042的博客 1650

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

计算机网络与通信

文章目录传输层端口UDPTCP网络层网际协议IPARP子网与子网掩码无分类编址 CIDR网际控制报文协议 ICMPICMP应用(Ping,tracert)路由选择协议(RIP, OSPF, BGP)IPV6数据链路层PPP 协议(Point-to-Point Protocol)CSMA/CDMAC 层的硬件地址MAC 帧格式物理层信道的基本概念信道的极限容量信道复用数据编码循环冗余校验 传输层 ...

qq_41956860的博客 4614

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

组建公司办公网络

网络传输介质主要分为有线传输介质和无线传输介质两大类,它们在网络建设和数据传输中扮演着至关重要的角色。:通过现有的电力线进行数据传输,虽然在速度和稳定性上不如专业的网络传输介质,但可以作为家庭网络扩展的一种便捷方式。:光纤通过光信号进行数据传输,具有非常高的传输速率和极佳的抗干扰性,常用于长距离通信和高速网络连接。:相较于双绞线,同轴电缆具有更好的抗干扰性能和更高的传输速度,常用于有线电视和早期的以太网。:通过可见光进行数据传输,是一种新兴的无线传输技术,具有高速度和高安全性的特点。

guojunwu1977的博客 1288

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

嵌入式之通信协议篇(八)

通信协议

博客 1751
上一篇: Twised 文件传输协议设计
下一篇: Pyhton Map 拉链法 的实现
xugangjava
博客等级 码龄16年 83粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值