搜索

[STM32F2] STM32F207做TFTP客户端收不到TFTP服务器的数据问题

[复制链接]
1453|37
手机看帖
扫描二维码
随时随地手机跟帖
chuxh|  楼主 | 2021-7-30 19:15 | 显示全部楼层 |阅读模式
ST提供的例程做IAP时STM32是做tftp服务器的。因项目需要,我们需要STM32做客户端。
主要的程序如下:
    UDPpcb = udp_new();
    if (UDPpcb != NULL)
    {
        /*assign destination IP address */
        IP4_ADDR( &dest_ip, 192, 9, 50, 224 );
        /* configure destination IP address and port */
        err= udp_connect(UDPpcb, &dest_ip, 69);
        if (err == ERR_OK)
        {
            /* Set a receive callback for the upcb */
            udp_recv(UDPpcb, tftp_recv_callback, NULL);
            len = sprintf (data, "%c%c%s%c%s%c", 0x00, TFTP_RRQ, "app.bin", 0x00, "octet", 0x00);
            /* allocate pbuf from pool*/
            p = pbuf_alloc(PBUF_TRANSPORT, len, PBUF_POOL);
            if (p != NULL)
            {
                /* copy data to pbuf */
                pbuf_take(p, (char*)data, len);
                /* send udp data */
                udp_send(UDPpcb, p);
                /* free pbuf */
                pbuf_free(p);
            }
            else
            {
                printf("Can not allocate pbuf\r\n");
            }
        }
但在测试中发现tftp_recv_callback从来没被调用

使用特权

评论回复
supernan| | 2021-7-30 19:21 | 显示全部楼层
还有什么现象呢?能再详细描述下吗

使用特权

评论回复
chuxh|  楼主 | 2021-7-30 19:25 | 显示全部楼层
导致服务器端收不到ACK而超时终止文件传输

使用特权

评论回复
pengf| | 2021-7-30 19:28 | 显示全部楼层
服务器IP搞对了?

使用特权

评论回复
chuxh|  楼主 | 2021-7-30 19:32 | 显示全部楼层
对的

使用特权

评论回复
chuxh|  楼主 | 2021-7-30 19:35 | 显示全部楼层
STM32做服务器时需要先用69端口来侦听, 有客户端连上来的时候再创建一个UDP和客户端通信.

使用特权

评论回复
stly| | 2021-7-30 19:37 | 显示全部楼层
做客户端应该不需要这样做吧

使用特权

评论回复
chuxh|  楼主 | 2021-7-30 19:41 | 显示全部楼层
只需刚开始建立的UDP来通信就可以了?

使用特权

评论回复
yszong| | 2021-7-30 19:43 | 显示全部楼层
贴个我设置的
/* 69 is the port used for TFTP protocol initial transaction */
        uint16_t port = 69;

        /* Create a new UDP control block */
        upcb = udp_new();

        if(upcb != NULL)
        {
                /* assign destination IP address */
                IP4_ADDR(&destIPaddr, DEST_IP_ADDR0, DEST_IP_ADDR1, DEST_IP_ADDR2, DEST_IP_ADDR3);

                /* configure destination IP address and port */
                err = udp_connect(upcb, &destIPaddr, port);

                if(err == ERR_OK)
                {
                        /* Set a receive callback for the upcb */
                        udp_recv(upcb, app_tftp_recv_callback, NULL);

                        //sprintf((char*)data, "sending udp client message %d", (int*)message_count);
                        pstr = &data[0];
                        message_count = 0;
                        *pstr++ = 0x00;
                        *pstr++ = TFTP_RRQ;                        //读报文
                        //*pstr++ = TFTP_WRQ;                //写报文

                        tm_strcpy(pstr, "999407.bin");
                        pstr += (strlen("999407.bin") + 1);

                        tm_strcpy(pstr, "octet");
                        pstr += (strlen("octet") + 1);

                        tm_strcpy(pstr, "blksize");
                        pstr += (strlen("blksize") + 1);

                        memset(buf, 0x00, sizeof(buf));
                        sprintf((char*)buf, "%d", 512);
                        tm_strcpy(pstr, buf);
                        pstr += (tm_strlen(buf) + 1);

                        tm_strcpy(pstr, "tsize");
                        message_count += strlen("tsize");
                        pstr += (strlen("tsize") + 1);

                        memset(buf, 0x00, sizeof(buf));
                        sprintf((char*)buf, "%d", 0);
                        tm_strcpy(pstr, buf);
                        pstr += (tm_strlen(buf) + 1);
                        message_count = pstr - &data[0];

                        /* allocate pbuf from pool */
                        p = pbuf_alloc(PBUF_TRANSPORT, message_count, PBUF_POOL);

                        if(p != NULL)
                        {
                                /* copy data to pbuf */
                                pbuf_take(p, (char*)data, message_count);

                                /* send udp data */
                                udp_send(upcb, p);

                                /* free pbuf */
                                pbuf_free(p);
                        }
                        else
                        {
                       
                        }
                }
                else
                {

                }
        }
        else
        {

        }

使用特权

评论回复
pengf| | 2021-7-30 19:45 | 显示全部楼层
这个是网络传输数据吗?

使用特权

评论回复
jiajs| | 2021-7-30 19:46 | 显示全部楼层
地址好像是Localhost。

使用特权

评论回复
chuxh|  楼主 | 2021-7-30 19:49 | 显示全部楼层
结果还是一样

使用特权

评论回复
chuxh|  楼主 | 2021-7-30 20:01 | 显示全部楼层
哪里设置错了吗?

使用特权

评论回复
dingy| | 2021-7-30 20:02 | 显示全部楼层
为什么你的port是4096?

使用特权

评论回复
wyjie| | 2021-7-30 20:04 | 显示全部楼层
不是69吗?

使用特权

评论回复
chuxh|  楼主 | 2021-7-30 20:06 | 显示全部楼层
客户端连接服务端的69端口, 客户端不一定要用69端口吧.

使用特权

评论回复
supernan| | 2021-7-30 20:07 | 显示全部楼层
就象服务端69端口收到客户端的请求, 重新开一个空闲端口与客户端通信一样

使用特权

评论回复
chuxh|  楼主 | 2021-7-30 20:10 | 显示全部楼层
你的程序服务端打印出来的客户端口是69?

使用特权

评论回复
wyjie| | 2021-7-30 20:14 | 显示全部楼层
应该是服务器设置好IP地址和端口号侦听客户端,客户端连接服务器IP地址和端口号后就可以了

使用特权

评论回复
dingy| | 2021-7-30 20:16 | 显示全部楼层
话说楼主用的PC工具软件调试服务器好用,调试客户端好用吗?

使用特权

评论回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 21小跑堂 打赏20.00元   3天前

    打赏帖:#申请原创# @21小跑堂@21小跑堂@21小跑堂 大 ...

  • 21小跑堂 打赏10.00元   3天前

    打赏帖:得到打赏,

  • 21小跑堂 打赏10.00元   3天前

    打赏帖:希望我的问题都能回答

  • 21小跑堂 打赏4.00元   3天前

    打赏帖:得到打赏,

  • 21小跑堂 打赏10.00元   3天前

    打赏帖:得到打赏,

  • 21小跑堂 打赏10.00元   3天前

    打赏帖:参加欧姆龙在线研讨会

  • 21小跑堂 打赏10.00元   3天前

    打赏帖:得到打赏,

  • 21小跑堂 打赏10.00元   3天前

    打赏帖:本次讲座问题截图

  • 21小跑堂 打赏10.00元   3天前

    打赏帖:学习学习再学习

  • 21小跑堂 打赏10.00元   3天前

    打赏帖:得到打赏,

  • 21小跑堂 打赏10.00元   3天前

    打赏帖:5

  • 21小跑堂 打赏10.00元   3天前

    打赏帖:得到打赏,

  • 1 火星国务卿 得到打赏 ¥425.00
  • 2 yanzhengxin1 得到打赏 ¥300.00
  • 3 gaoyang9992006 得到打赏 ¥265.00
  • 4 Gavin3389 得到打赏 ¥225.00
  • 5 13426257085 得到打赏 ¥200.00
  • 6 呐咯密密 得到打赏 ¥185.00
  • 7 两只袜子 得到打赏 ¥155.00
  • 8 yangjiaxu 得到打赏 ¥155.00
  • 9 cr315 得到打赏 ¥150.00
  • 10 elephant00 得到打赏 ¥150.00
在线客服 快速回复 返回顶部 返回列表