0

我需要在下载后解析文本文件流,而不使用 tftp 协议将文本文件保存到硬盘或 SD 卡。我有有效载荷中的数据。请帮忙。

struct pbuf {

    struct pbuf *next;
    void *payload;
    u16_t tot_len;
    u16_t len;  
    u8_t  type;
    u8_t flags;
    u16_t ref;

};

以下代码分配操作码和文件名。但是如何获取文件的内容呢?

/* Extract the opcode from a TFTP message in a buffer */
tftp_opcode tftp_decode_op(char *buf)
{
  return (tftp_opcode)(buf[1]);
}

void tftp_extract_filename(char *fname, char *buf)
{
  strcpy(fname, buf + 2);
}
4

2 回答 2

2

在 TFTP 协议中,你首先得到一个写请求包(操作码 WRQ),然后是单独的数据包中的数据(操作码 DATA)。每当接收到数据包时,您都需要做一些事情来处理文件的内容。如果您还没有这样做,我建议您阅读一些有关 TFTP 协议的内容。概述位于http://en.wikipedia.org/wiki/Trivial_File_Transfer_Protocol#Protocol_walkthrough,规范(非常易读)位于https://www.rfc-editor.org/rfc/rfc1350

于 2014-01-13T08:24:02.757 回答
0

如果您的文本文件不超过一些 KB,那么为什么不使用静态缓冲区来存储它的内容。在 TFTP 协议中,您必须知道接收到的数据包在哪个(从源的角度来看)点。所以您得到数据包缓冲区和大小数据包。所以只需将接收到的数据包缓冲区复制到上面的静态缓冲区中,并增加静态缓冲区的次数等等......所以最后你会在静态缓冲区中获得整个文本文件内容。

于 2014-01-13T09:07:57.830 回答