rt_thread-tftp设备端作为客户端上传与下载文件

   TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务端口号为69。

   有时需要我们手动获取与下载文件,那么tftp协议比较简洁。

   搭建好服务器

注意事项:

 选择合适的软件版本netutils-v1.3.1

 为了支持tftp 客户端功能,需要调整两个地方代码,原代码运行存在问题。文件系统移植的是littlefs 文件系统

 a.调整netutils-v1.3.1\tftp\

 修改函数代码,

 int tftp_send_request(struct tftp_xfer *xfer, uint16_t cmd, const char *remote_file)

int tftp_send_request(struct tftp_xfer *xfer, uint16_t cmd, const char *remote_file)
{
    struct tftp_packet *send_packet;
    struct tftp_xfer_private *_private;
    int size, r_size;
    int res;

    _private = xfer->_private;
    /* Check connection type */
    if (xfer->type != TFTP_XFER_TYPE_CLIENT)
    {
        res = tftp_xfer_type_set(xfer, TFTP_XFER_TYPE_CLIENT);
        if (res != TFTP_OK)
        {
            return res;
        }
    }
    /* malloc mem */
    send_packet = malloc(sizeof(struct tftp_packet));
    if (send_packet == NULL)
    {
        return -TFTP_EMEM;
    }
    /* Packing request packet header */
    send_packet->cmd = htons(cmd);
#ifdef MY_TFTP	
    size = sprintf(send_packet->info.filename, "%s%c%s%c%s%c%d%c%s%c%d%c",
        remote_file, 0, xfer->mode, 0, "blksize", 0, xfer->blksize, 0,"tsize", 0, 0, 0) + 2;
#else
    size = sprintf(send_packet->info.filename, "%s%c%s%c%d%c", remote_file, 0, xfer->mode, 0, xfer->blksize, 0) + 3;
#endif		
    /* send data */
    r_size = sendto(xfer->sock, send_packet, size, 0,
        (struct sockaddr *)&_private->server, sizeof(struct sockaddr_in));
    free(send_packet);
    if (size != r_size)
    {
        return -TFTP_EXFER;
    }
    return TFTP_OK;
}

 如果不修改这个函数,那么设备作为客户端时候,读取服务器上面的文件时候,会报错:

 b.修改 littlefs 文件 系统的头文件 lfs.h

// File open flags
enum lfs_open_flags {
//============================修改前==========================================
//    // open flags
//    LFS_O_RDONLY = 1,         // Open a file as read only
//#ifndef LFS_READONLY
//    LFS_O_WRONLY = 2,         // Open a file as write only
//    LFS_O_RDWR   = 3,         // Open a file as read and write
//==============================修改后========================================
    // open flags
    LFS_O_RDONLY = 0,         // Open a file as read only
#ifndef LFS_READONLY
    LFS_O_WRONLY = 1,         // Open a file as write only
    LFS_O_RDWR   = 2,         // Open a file as read and write
//==============================end============================================
    LFS_O_CREAT  = 0x0100,    // Create a file if it does not exist
    LFS_O_EXCL   = 0x0200,    // Fail if a file already exists
    LFS_O_TRUNC  = 0x0400,    // Truncate the existing file to zero size
    LFS_O_APPEND = 0x0800,    // Move to end of file on every write
#endif

    如果不修改该头文件,会报错:

   

 客户端命令如下:

### 2.3.1 TFTP 命令详解

TFTP 客户端读取文件命令详解

tftp -r/-w ip_addr file_name [-p]

- tftp      : 第一个参数固定 `tftp`
- -w        : 往服务器写文件
- -r        : 从服务器读文件
- ip_addr   : 服务器 IP 地址
- file_name : 文件名字
- -p        : 服务器端口号

### 2.3.2 TFTP 读文件

tftp -r ip_addr file_name

使用上述命令将 tftp 服务器上的一个文件下载到本地。命令示例如下:

eg: tftp -r 192.168.1.13 text.txt

从 192.168.1.13 这个服务器上下载 text.txt 文件到本地根路径下

### 2.3.2 TFTP 写文件

tftp -w ip_addr file_name

使用上述命令将本地的一个文件上传到 tftp 服务器。命令示例如下:

eg: tftp -w 192.168.1.13 text.txt

把本地根路径下 text.txt 文件上传到 192.168.1.13 服务器上

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z是一个文件的名称或标识符。这是一个包含一系列文件的压缩存档文件,采用了.7z的文件格式。通过点击或访问相关的下载链接,你可以将这个文件下载到你的计算机中。 在下载过程中,你需要确保你有一个合适的下载工具或者浏览器来支持.7z文件下载和解压。下载时请确保选择一个安全的来源,以确保文件的完整性和安全性。 一旦下载完成,你可以使用一个解压缩软件(如7-Zip等)来解开这个存档文件,并且提取其中的文件。该存档文件可能包含源代码、二进制可执行文件、库文件、文档等等,具体内容取决于该存档的用途和来源。 下载x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z可能是为了获得特定的软件或工具,以满足你的需求。在得到下载后,你可以按照相关的说明或文档进行后续的操作,如安装、配置或使用。如果你有任何问题或需要进一步的帮助,你可以提供更多细节,以便我们能够提供更具体和有针对性的答案。 ### 回答2: x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z是一个压缩文件的名称,用于下载一个特定的软件版本。"x86_64"表示该软件是针对x86-64架构的,这是一种常见的微处理器指令集架构。"8.1.0"表示软件的版本号为8.1.0。"release"表示该版本为正式发布版本,而不是测试版或开发版。"posix"指明该软件使用了POSIX标准,该标准定义了在UNIX操作系统中,软件应该如何进行交互和通信。"seh"表示该软件使用了结构化异常处理(SEH)机制,这是一种用于处理计算机程序中异常情况的方法。"rt_v6"和"rev0"是软件内部版本号的一部分,用于跟踪和标识软件不同的迭代和修复。".7z"是该压缩文件文件格式,使用7-Zip压缩算法。 要下载这个文件,您可以访问所在位置的网站或文件存储的平台,并在搜索或下载部分中搜索" x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z"。找到该文件后,可以点击下载按钮或链接,文件将开始下载到您的计算机。请注意,该文件可能比较大,下载时间可能会受到网络速度和连接质量的影响。完成下载后,您可以使用适当的解压缩软件打开该文件,并提取其中的内容以使用该软件。 ### 回答3: x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z 是一个文件的名称,它表示一个特定版本的软件或者操作系统的发行版。.7z 是该文件的压缩格式。你可以在互联网上找到这个文件并进行下载。 为了下载这个文件,你可以按照以下步骤进行操作: 1. 打开一个互联网浏览器,如Google Chrome、Mozilla Firefox等。 2. 在浏览器的搜索栏中输入 "x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z" 并按下回车键。 3. 你会看到一系列搜索结果,点击其中一项看看是否能够直接下载这个文件。 4. 如果没有找到直接下载链接,你可以尝试在搜索结果中找到相关网站或论坛,进入这些网站寻找下载链接。有时候开发者会将这些文件放在自己的网站上供用户下载。 5. 一旦你找到了下载链接,点击它并等待文件下载完成。 6. 下载完成后,你可以在下载文件的浏览器目录中找到这个文件。推荐将它保存到一个容易找到的位置,如桌面或者专门的文件夹。 7. 使用解压缩软件(如WinRAR、7-Zip等)解压缩这个文件。右键点击文件,选择 "解压" 或者 "解压缩到指定目录",然后选择解压缩的目标文件夹。 8. 解压缩完成后,你可以浏览这个文件的内容,其中可能会包含安装文件、说明文档、示例代码等。 希望这个回答对你有帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值