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


    前言

      由于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:未知错误,无法继续接收;
    • 其他错误码保留,待以后扩展使用

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

    保留:扩展协议使用

    扩展

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

  • 相关阅读:
    JS 深拷贝方法
    数字图像处理中的混叠
    RoIAlign理解
    关于python项目vscode 提示import could not be resolved的问题解决
    HTTPS网站证书申请,HTTPS的安全特性
    使用多域名SSL证书 一种免费的证书申请方式
    During secondary validation: DNS problem: query timed out looking up CAA for ***
    The Next Gen Database Servers Powering Let's Encrypt
    Jenkins 构建及回滚任务
    Go优雅追踪堆栈错误包
  • 原文地址:https://www.cnblogs.com/chusiyong/p/11394710.html
Copyright © 2020-2023  润新知