OpenEdv-开源电子网

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

请问STM32F4怎么用LWIP协议栈里面的TFTP协议上传文件

[复制链接]

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2013-3-20
在线时间
6 小时
发表于 2015-2-6 17:28:36 | 显示全部楼层 |阅读模式
5金钱
原子大哥以及各位同行高手,我现在做一个项目,目的在STM32F439平台上,把SD卡里面的文件上传到指定服务器。目前已经移植好LWIP协议栈,能ping通板子,并且移植了官方的tftpserver.c文件,先在想通过tftp协议上传文件到指定服务器。各位谁有这方面经验,请假一下。
目前想的方法是:
第一步:用tftpserver.c中的err_t tftp_send_message(struct udp_pcb *upcb, struct ip_addr *to_ip, int to_port, char *buf, int buflen)向指定地址发送写文件请求;
第二步:用tftpserver.c中的void process_tftp_request(struct pbuf *pkt_buf, struct ip_addr *addr, u16_t port)函数处理回应,如果接收到回应后,process_tftp_request函数中的int tftp_process_write(struct udp_pcb *upcb, struct ip_addr *to, int to_port, char *FileName)函数发送数据文件。
基本流程就是上述所说,但是tftp_send_message()函数中的参数struct udp_pcb *upcb,数据结构非常复杂
struct udp_pcb {
/* Common members of all PCB types */
  IP_PCB;

/* Protocol specific PCB members */

  struct udp_pcb *next;

  u8_t flags;
  /* ports are in host byte order */
  u16_t local_port, remote_port;

#if LWIP_IGMP
  /* outgoing network interface for multicast packets */
  struct ip_addr multicast_ip;
#endif /* LWIP_IGMP */

#if LWIP_UDPLITE
  /* used for UDP_LITE only */
  u16_t chksum_len_rx, chksum_len_tx;
#endif /* LWIP_UDPLITE */

  /* receive callback function
   * addr and port are in same byte order as in the pcb
   * The callback is responsible for freeing the pbuf
   * if it's not used any more.
   *
   * ATTENTION: Be aware that 'addr' points into the pbuf 'p' so freeing this pbuf
   *            makes 'addr' invalid, too.
   *
   * @param arg user supplied argument (udp_pcb.recv_arg)
   * @param pcb the udp_pcb which received data
   * @param p the packet buffer that was received
   * @param addr the remote IP address from which the packet was received
   * @param port the remote port from which the packet was received
   */
  void (* recv)(void *arg, struct udp_pcb *pcb, struct pbuf *p,
    struct ip_addr *addr, u16_t port);
  /* user-supplied argument for the recv callback */
  void *recv_arg;  
};
不知道怎么向这个结构体指针传参数?
并且一般FTP传文件都要知道对方IP以及“用户名,密码”,可以这个发消息的结构体中没有涉及到“用户名,密码”方面。
谁有这方面的开发经验,请赐教,谢谢!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-2-6 23:08:12 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2016-1-28
在线时间
36 小时
发表于 2017-7-31 21:10:29 | 显示全部楼层
请问有人解决这个发送文件的问题吗
回复

使用道具 举报

4

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2017-7-18
在线时间
29 小时
发表于 2017-8-1 11:22:26 | 显示全部楼层
因为这是TFTP,没有FTP里的那种用户验证。。。所以自然没有账户和密码
回复

使用道具 举报

18

主题

238

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1823
金钱
1823
注册时间
2014-8-5
在线时间
211 小时
发表于 2017-8-1 20:00:51 | 显示全部楼层
回复

使用道具 举报

2

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2019-4-20
在线时间
11 小时
发表于 2019-9-27 09:11:27 | 显示全部楼层
UDP的性质决定它在跨网域传输时需要很多配置,这个TFTP在局域网里跑的很好而且速度很快,但后来发现用内网去向外网传输根本传不出去,需要做跨网广播以及穿透  在路由上进行设置  已经超出本人能力了
最后这个TFTP的远程升级的项目 只能由TCP协议代替了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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