OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4182|回复: 7

STM32F107做TFTP客户端收不到TFTP服务器的数据问题

[复制链接]

2

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2019-4-20
在线时间
11 小时
发表于 2019-8-28 17:15:42 | 显示全部楼层 |阅读模式
10金钱
ST提供的例程做IAP时STM32是做tftp服务器的。因项目需要,我们需要STM32做客户端。
基于LWIP的TFTP 客户端,用的官方做服务器的例子进行修改,初始化代码如下
err_t tftp_init_client(void)
{
  err_t err;
  unsigned port = 69;
  /* create a new UDP PCB structure  */
  UDPpcb = udp_new();
  if (!UDPpcb)
  {  /* Error creating PCB. Out of Memory  */
    return ERR_MEM;
  }
        
  /* Bind this PCB to port 69  */
  err = udp_bind(UDPpcb, IP_ADDR_ANY, port);
  if (err != ERR_OK)
  {    /* Unable to bind to port  */
    udp_remove(UDPpcb);
                return err;
  }        

  /* TFTP client start  */
  udp_recv(UDPpcb, recv_callback_tftp, NULL);
        Request_File();
        return ERR_OK;
}


程序运行后服务器成功收到RRQ包,并返回了DATA包,但是测试中发现 recv_callback_tftp从来没被调用,导致服务器端收不到ACK而超时终止文件传输
麻烦做过相关工作的前辈们看看,问题出在那里了 Snipaste_2019-08-27_11-41-48.jpg

最佳答案

查看完整内容[请看2#楼]

谢谢 原子哥 已经有一位大神帮我解决了我的疑惑,是我封装RRQ包时,没有加入tsize选项根据RFC 2349协议 tsize作为RRQ包的附加项,用来返回OACK包获取文件的大小,而不是像网上的一种说法 这样客户端是无法直接接收的
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2019-4-20
在线时间
11 小时
 楼主| 发表于 2019-8-28 17:15:43 | 显示全部楼层
本帖最后由 iDneW 于 2019-9-9 15:36 编辑

谢谢 原子哥
已经有一位大神帮我解决了我的疑惑,是我封装RRQ包时,没有加入tsize选项根据RFC 2349协议
Snipaste_2019-09-09_15-25-08.jpg
tsize作为RRQ包的附加项,用来返回OACK包获取文件的大小,而不是像网上的一种说法
客户端发送RRQ包后,服务器就直接返回DATA包

这样客户端是无法直接接收的
回复

使用道具 举报

2

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2019-4-20
在线时间
11 小时
 楼主| 发表于 2019-8-28 17:18:24 | 显示全部楼层
现在有了一点思路  通过观察回调函数中 这个判断发现 当前绑定的是69端口,只能接收到RRQ 和 WRQ两种命令 所以无法直接将判断条件修改为TFTP_DATA解决,还有一个问题是根据TFTP协议,服务器接收第一个包用的是69端口,但之后就会新建一个端口用来回消息,那么我如何知道新的端口是多少  如何接收DATA包
switch (op)
  {

    case TFTP_RRQ:    /* TFTP RRQ (read request) 客户端要求接收TFTP数据,服务器发送数据命令*/
      /* Read the name of the file asked by the client to be sent from the SD card */
      tftp_extract_filename(FileName, pkt_buf->payload);
      /* Start the TFTP read mode*/
      tftp_process_read(upcb, addr, port, FileName);
      break;

    case TFTP_WRQ:    /* TFTP WRQ (write request)   客户端发TFTP数据请求,服务器接收数据命令*/
      /* Read the name of the file asked by the client to received and writen in the SD card */
      tftp_extract_filename(FileName, pkt_buf->payload);
      //在这个加入擦FALSH
          /* Initialize FlashDestination variable */
      FlashDestination = ApplicationAddress;
          /* Erase the needed pages where the user application will be loaded */
      /* Define the number of page to be erased */
      NbrOfPage = FLASH_PagesMask(0x10000);//擦除64K

      /* Erase the FLASH pages */
      for (EraseCounter = 0; (EraseCounter < NbrOfPage) && (FLASHStatus == FLASH_COMPLETE); EraseCounter++)
       {
         FLASHStatus = FLASH_ErasePage(FlashDestination + (PageSize * EraseCounter));
       }
      /* Start the TFTP write mode*/
      tftp_process_write(upcb, addr, port, FileName);
      break;

    default:
      /* sEndTransfera generic access violation message */
      tftp_send_error_message(upcb, addr, port, TFTP_ERR_ACCESS_VIOLATION);
      /* TFTP unknown request op */
      /* no need to use tftp_cleanup_wr because no "tftp_connection_args" struct has been malloc'd   */
      udp_remove(upcb);

      break;
  }
回复

使用道具 举报

2

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2019-4-20
在线时间
11 小时
 楼主| 发表于 2019-8-28 17:21:51 | 显示全部楼层
本帖最后由 iDneW 于 2019-8-28 17:30 编辑

已经在网上查了这问题一个多星期了STM32F207做TFTP客户端收不到TFTP服务器的数据问题http://bbs.21ic.com/icview-12469 ... =%E5%A4%B1%E6%A0%BC
(出处: 中国电子网技术论坛) 只有这个帖子问题比较相近但没有给解决方法

该问题目前无解,请大家帮忙看看
回复

使用道具 举报

2

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2019-4-20
在线时间
11 小时
 楼主| 发表于 2019-9-5 17:03:48 | 显示全部楼层
自顶  这么多天过去了 ,一个人都没啊  
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2019-9-6 02:31:06 | 显示全部楼层
帮顶
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2019-10-29
在线时间
8 小时
发表于 2019-12-26 19:42:19 | 显示全部楼层
楼主能发一个官网的TFTP客户端的例子源码吗?邮箱751191958@qq.com,我也在做这一块,看看能否互相交流一下
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2019-12-30
在线时间
1 小时
发表于 2019-12-30 16:06:05 | 显示全部楼层
没明白,你是怎么配置tsize的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 16:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表