Twised 文件传输协议设计

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

最近在做一个文档的管理系统,用ftp的话 权限 不够,有的目录无权访问。

网上找了一些,都不能够满足业务需要,只有自己来设计一个通信协议来传输文件

设计思路是 切换 服务端和 客户端 的状态来完成文件发送(其实点对点用这个协议也可以)

下面协议测试代码,将D:/book.pdf 发送到D:/1.pdf  后续还需要扩展断点 相关功能

服务端

# -*- coding: gbk -*-
from twisted.internet.protocol import Protocol,Factory
from twisted.protocols.basic import LineReceiver
from pyftpdlib import ftpserver
from twisted.internet import reactor
import pickle
import os
########################################################################
class Status:
	RECV='RECV'           #接受文件状态
	SEND='SEND'          #发送文件状态
	DONE='DONE'         #当前文件传输完成
	WAIT='WAIT'           #等待对方响应)
	LOOP='LOOP'          #循环发送字节流
	ABORT='ABORT'       #终止发送 
	
class FileTranProtocol(LineReceiver):
	"""socket文件传输协议"""
	#----------------------------------------------------------------------
	def __init__(self):
		self.fp=None
		self.totalsize=0
		self.rest=0#这个用来扩展断点功能
		self.mystatus=None
		self.yourstatus=None
		self.blocksize=0
		self.localpath=None
		self.cursize=0
	
	#根据命令行 查找对应的命令
	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:
			self.fp.write(data)
			self.cursize+=len(data)
			#由于我处于LOOP态 
			#对方处于SEND态 可以接受 Cmd 
			#这里 用DONE 命令来关闭文件流
			if self.cursize>=self.totalsize:
				self.DONE()
		else:
			#处理命令行
			LineReceiver.dataReceived(self,data)
			
	def DONE(self):
		if self.fp:
			self.fp.flush()
			self.fp.close()
		self.mystatus=Status.DONE
		self.sendLine('DONE'+pickle.dumps('EOF'))
		
	def do_DONE(self,param):
		if self.fp:
			self.fp.flush()
			self.fp.close()
		self.mystatus=self.yourstatus=Status.DONE
		
	#发送文件	命令
	def RETR(self,localpath,blocksize=8192):
		self.totalsize=os.path.getsize(localpath)
		self.localpath=localpath
		self.blocksize=blocksize
		self.sendLine('STOR'+pickle.dumps((self.localpath,self.totalsize,self.blocksize)))
		self.STAT(Status.WAIT)
	
	#处理 接受文件 命令	                    
	def do_STOR(self,param):
		self.localpath,self.totalsize,self.blocksize=param[0],param[1],param[2]
		#接收方 选择本地保存路径
		self.localpath='D:/1.pdf'
		self.fp=open(self.localpath,'ab') if self.rest else open(self.localpath,'wb')
		self.STAT(Status.RECV)
		
	#告诉对方 我的状态
	def STAT(self,status):
		print 'tell other '+status
		self.mystatus=status 
		self.sendLine('STAT'+pickle.dumps((status,self.rest)))
		
	def do_STAT(self,param):
		print 'tell me '+param[0]
		self.yourstatus,self.rest=param[0],int(param[1])
		#接受方告诉我们发送字节流
		if self.yourstatus==Status.LOOP:
			while 1:
				buf=self.fp.read(self.blocksize)
				if not buf:break
				self.transport.write(buf)

		#你准备接受完毕
		elif self.yourstatus==Status.RECV and self.mystatus==Status.WAIT:
			self.fp=open(self.localpath,'rb') #D:/book.pdf
			if self.rest and self.rest<self.totalsize:self.fp.seek(self.rest)
			#好的我开始发送了
			self.STAT(Status.SEND)
	
		#告诉发送端开始文件流循环
		elif self.yourstatus==Status.SEND and self.mystatus==Status.RECV:
			self.STAT(Status.LOOP)
	
	def connectionLost(self, reason):
		if self.fp:
			self.fp.close()
			

	#接受文件	命令
	def STOR(self,localpath):
		self.STAT(Status.WAIT)

	def do_EXIT(self):
		if self.fp:self.fp.close()
		self.STAT(Status.DONE)
		self.__init__(self)

		
		
########################################################################
class FileTranFactory(Factory):
	def buildProtocol(self,addr):
		return FileTranProtocol()
		
		
if __name__=='__main__':
	reactor.listenTCP(8200, FileTranFactory())
	reactor.run()
		
    

客户端

from twisted.internet.protocol import Protocol,Factory
from twisted.internet.protocol import ClientCreator
from twisted.internet import reactor
import os
from server import *

def Run(p):
	p.RETR('D:/book.pdf')
	
if __name__=='__main__':
	creator = ClientCreator(reactor, FileTranProtocol)
	d = creator.connectTCP("localhost", 8200)
	d.addCallback(Run)
	reactor.run()

运行结果




使用不可靠的UDP设计可靠的文件传输协议 一、了解UDP协议一些具体细节(可以直接跳到二、三看协议设计部分) UDP协议的工作是将待发送的网络数据流量压缩成数据报的形式,然后由服务器端发送给客户端。但是UDP协议是面向无连接的,它只提供最大努力的服务,也就是说UDP协议不带有在发送端进行数据报分组,在接收端再对收到的报文进行重新 排序和组装的功能。这样一来,当一个数据报从发送端出发后,系统是不对报文进行顺序编号和检查的,在接收端也就无法感 阅读详情

相关推荐

7. 网络通信原理基础

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

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

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

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

qq_25956141的博客 2588

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

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

Ubuntu中SED命令用法

文本间隔: --------  # 在每一行后面增加一空行  sed G  # 将原来的所有空行删除并在每一行后面增加一空行。  # 这样在输出的文本中每一行后面将有且只有一空行。  sed '/^$/d;G'  # 在每一行后面增加两行空行  sed 'G;G'  # 将第一个脚本所产生的所有空行删除(即删除所有偶数行)  sed 'n;d'  # 在匹配式样“regex”的行之前插...

iteye_5099的博客 1147

twisted文件传输.rar

环境python2.7.基于twisted的文件传输系统,实现从服务器端向客户端传输 1、先启动服务端,输入要传输文件的绝对路径 2、启动客户端,输入要保存文件的绝对路径 3、传输完成

网络课程设计文件传输协议的简单实现FTP(包含客服端服务器端程序C#和实验报告)

文件传送协议是一种最基本的应用层协议按照客户/服务器的模式进行工作,提供交互式的访问,是INTERNET使用最广泛的协议之一。文件传输协议的简单设计与实现建立在计算机网络实验环境TCP/IP 网络体系结构之上,使用socket 编程接口编写两个程序,分别为客户程序(client)和服务器程序(server)

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

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

庄小焱 3077

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

使用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和实现程序功能的关键步骤,其他三步在各种程序中基本相同。

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

接上篇,代码里面文件发送和接受全部写道一起了比较乱 最近再次整理了一下 服务端 协议代码  class Status: RECV='RECV' #接受文件状态 SEND='SEND' #发送文件状态 DONE='DONE' #当前文件传输完成 WAIT='WAIT' #等待对方响应) LOOP='LOOP'

xugangjava的专栏 1189

Python 基于Twisted框架的文件夹网络传输

主要介绍了Python 基于Twisted框架的文件夹网络传输源码,需要的朋友可以参考下

手把手教你用Zynq-7100 FPGA实现100Mbps OOK信号定时同步(含完整Verilog代码)

本文详细介绍了如何在Zynq-7100 FPGA平台上实现100Mbps OOK信号的定时同步,涵盖插值算法、Gardner定时误差检测等关键技术。通过完整的Verilog代码和优化技巧,解决了50MHz外部时钟条件下的400MHz采样率同步挑战,为无线通信系统设计提供实用解决方案。

weixin_42522374的博客 301

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

(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

从零构建腾讯滑块验证码破解引擎:逆向工程与实战对抗

本文深入解析腾讯滑块验证码(原天御验证码)的防护机制,包括环境感知层、行为分析层和验证决策层的核心技术。通过JSVMP虚拟机保护、轨迹验证算法和动态加密体系,腾讯验证码实现了高效的人机识别。文章还提供了安全研究实践指南,涵盖环境模拟和验证码识别方案,并探讨了防御对抗的演进趋势与合规研究建议。

rl6adventurer的博客 827

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

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

刘躺的博客 1588

【电磁场计算】磁偶极子在外磁场中的受力

最近在总结电磁场计算公式的时候发现,关于磁偶极子受力的计算公式,在不同文献中的说明有点出入,在此特地写一篇博客澄清一下。

sky4403的博客 7462

GMSL转eDP芯片MAX9686X(ADI)

MAX96860/MAX96862/MAX96864解串器可以把单路或双路GMSL转换成eDP V1.4a,支持820MHzPCLK的无压缩的24bpp(每个像素的位数)视频,或660MHz的30bpp视频。芯片的GMSL支持NRZ编码的6Gbps/187Mbps的GMSL2,PAM4编码的12Gbps/187Mbps的GMSL3。同时支持单线(COAX模式)双向全双工传输控制数据和video数据。支持DSC压缩的芯片,最大支持像素时钟1080MHz@24bpp或者864MHz@30bpp,传输方式包括同轴

qflook的博客 2835

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

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

gitblog_00737的博客 915

Response Instance 详解:在 ABAP OData Client Proxy 中读懂每一次响应

ABAP OData Client Proxy中的Response Instance是关键信息载体,封装了业务数据及调用上下文(如分页、delta link等)。响应实例在执行请求后自动生成,根据请求类型返回特定接口(如READ返回/IWBEP/IF_CP_RESPONSE_READ)。响应抽象与OData版本解耦,支持统一处理V2/V4服务。常见响应类型包括单实体读取、列表读取(支持分页和增量同步)、创建/更新/删除响应等。开发时可通过响应对象的安全类型方法获取数据,如get_business_data获

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 136

计算机网络复习笔记

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

qq_42171042的博客 1650

TurboQuant: Online Vector Quantization with Near-optimal Distortion Rate

这篇被 ICLR 2026 接收的论文提出了一种名为TurboQuant的全新在线向量量化(Vector Quantization, VQ)算法。该研究的核心目标是解决大语言模型(LLM)在长上下文推理时面临的 KV Cache 显存消耗瓶颈,以及大规模向量数据库在近似最近邻检索中的存储与延迟问题。有别于现有技术,TurboQuant 是一种无需任何校准数据、无需训练的在线算法(Data-oblivious)。

c_cpp_csharp的专栏 118

YOLOv8 超参数调优教程! 使用Ray Tune进行高效的超参数调优!

YOLOv8超参数调优教程!😎 使用Ray Tune进行高效的超参数调优!

Coding... 1万+

计算机网络与通信

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

qq_41956860的博客 4614

SAP-ABAP:ABAP 开发基础概念入门:写给刚踏入 SAP 开发世界的新人

本文介绍了 ABAP 开发语言的基础概念,帮助 SAP 开发新人快速入门。主要内容包括: ABAP 的发展历程与核心优势 - 作为 SAP 平台的专属语言,ABAP 在企业级应用开发中具有深度集成、数据处理高效和长期稳定的特点 ABAP 开发环境概览 - 介绍了 SE38、SE80 等关键事务码,以及 ABAP 工作台的核心组件和开发权限管理 基础语法入门 - 重点讲解了 ABAP 特有的数据类型体系(特别是结构体和内表),并通过 Hello World 示例展示程序基本结构 文章通过对比 ABAP 与 J

baidu_35680696的博客 511

组建公司办公网络

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

guojunwu1977的博客 1288

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

VC中sqlite的使用

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

Atmega的TWI通信,包含模拟IIC,硬件查询方式,以及硬件方式收发程序

Atmega的TWI通信,包含模拟IIC,硬件查询方式,以及硬件方式收发程序。开发环境支持IAR和AVR Studio,编译环境是AVR Studio。使用IAR编译环境需要自己移植。

Haiguozhe的博客 4449

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

文件传输协议的简单设计与实现(c语言)

  文件传输协议的简单设计与实现(c语言,VC6.0)使用Socket进行Client/Server程序设计的一般连接过程是这样的:Server端Listen(监听)某个端口是否有连接请求,Client端向Server端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Client端都可以通过Send,Write等

思想比知识更重要 成长比成功更重要 7139

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

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

上一篇: wxPython 实现右下角弹出框
下一篇: Twised 文件传输协议设计(二)
xugangjava
博客等级 码龄16年 83粉丝 72原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值