文件传输协议---一种自定义的文件传输协议

前言

  由于TFTP协议过于简单,且没有重传机制;FTP协议很好,但是不能完美的嵌入到已有的代码中,从零开发有一定难度,因此定义了一种基于UDP协议,简单,有确认和重传机制的文件传输协议。

  该种协议只有一对Socket套接字,没有控制命令,直接就是文件数据的传输,所以很容易以函数级别嵌入到已有代码中,且对性能的影响非常小,由于协议是在UDP协议的基础上定义的,因此需要有确认机制。通信的两端没有服务端和客户端之分,两端都可以发起。唯一的条件是:两端的UDP通信的Socket已经建立成功,且通信正常。

 

协议格式

发起端:

总包数(4)、本包序号(4),本包长度(4),本包校验码(2)、本包数据(N)

说明:

文件总包数:文件包总数。
本包序号:包序号,从1开始计。
本包长度:后续“本包数据”字段的长度,如果通讯层包最大32K,该值建议不超过16K。
本包数据校验码:根据CRC计算校验码(只计算”本包数据”字段的内容)。
本包数据:具体需要传输的数据。

 

接收端:

本包序号(4)、当前状态(2)、重传包序号(4)、保留(2)

说明:

本包序号:当前包的报序号

当前状态:不同的情况对应不同的状态,且数据接收失败,一律丢弃。

  • 0x0000:本包数据接收成功,可以接收下一包数据;
  • 0x0001:全部数据接收成功;
  • 0x0002:本包数据接收失败,长度不符或校验码错,可以重新接收本包数据;
  • 0x0003:本包数据接收失败,序号错,需要重新接收“重传包序号(4)”的包;
  • 0x0004:本包数据接收失败,单板出现数据存储出错,无法继续接收;
  • 0x0005:内存申请失败,无法继续接受;
  • 0xFFFF:未知错误,无法继续接收;
  • 其他错误码保留,待以后扩展使用

重传包序号:如果需要重传,该字段填写需要重传的包序号

保留:扩展协议使用

 

扩展

  该协议有确认和重传机制,但是没有超时机制,可以添加确认超时机制,保证数据的传输更加稳定!

 

转载于:https://www.cnblogs.com/chusiyong/p/11394710.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自定义FTP服务器与客户端 在我们平时的上网过程中 一般都是使用FTP的客户端来对商家提供的服务器进行访问(上传 下载文件) 例如我们经常用到微软的SkyDrive网盘 115网盘等 然而我们经常用到的都是网页版本的 网页版本和客户端版本的不同 网页版本的FTP客户端 它与服务器的交流是使用HTTP协议发出对服务器的请求的 而客户端版本采用的是FTP协议发出命令对服务器进行请求 然后我们接触到FTP服务器却很少的 所以本专题中将和大家介绍下如何实现一个FTP服务器(不要觉得服务器很深奥一样的 大家可以简单的认为服务器也是一个程序 该程序是对客户端发来的请求做处理的 请求大家可以简单理解为字符串 从这个角度看 服务器程序就是一个对字符串解析的过程 ) 也是为后面的一个专题做一个铺垫 因为后面专题将和大家介绍下FTP客户端 文件上传下载器 有了自己自定义的FTP服务器后 自定义的FTP客户端就可以对自定义的FTP服务器进行访问 使两者形成一个完整的软件 从而也让大家对基于FTP协议的工具有一个初步的了解">自定义FTP服务器与客户端 在我们平时的上网过程中 一般都是使用FTP的客户端来对商家提供的服务器进行访问(上传 下载文件) 例如我们经常用到微软的SkyDrive网盘 115网盘等 然而我们经常用到的都是网页版本的 网页版 [更多]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值