首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发送UDP包(lwip、Cortex M3、Stellaris LM3S6965评估板)

发送UDP包(lwip、Cortex M3、Stellaris LM3S6965评估板)
EN

Stack Overflow用户
提问于 2013-01-06 20:27:16
回答 3查看 9K关注 0票数 1

我正在与Stellaris®LM3S6965评估板Cortex M3一起工作。我正在尝试向NTP服务器发送UDP数据包。我已经找了好几天了。

但它不起作用。有人能帮我吗?我认为回调函数没有被调用。

代码语言:javascript
复制
int main(void){
   sendUDP();
}

void sendUDP(void){

    //UDP

    struct ip_addr dstaddr;
    struct ip_addr srcaddr;
    struct udp_pcb * pcb;
    u16_t * dst_port;
    struct pbuf * pb;

    char str[512]="Test Sander";
    IP4_ADDR(&dstaddr,65,55,21,24); // time.windows.com
    IP4_ADDR(&srcaddr,192,168,1,10); // cortex
    dst_port = 123;

    pcb = udp_new();

    RIT128x96x4Enable(1000000);
    RIT128x96x4StringDraw("UDP CONNECT", 45, 45, 15);

    udp_bind(pcb,&srcaddr,&dst_port);
    udp_connect(pcb,&dstaddr,&dst_port);

    pb = pbuf_alloc(PBUF_TRANSPORT, 512, PBUF_REF);
    pb->payload = str;
    pb->len = pb->tot_len = 512;

    udp_sendto(pcb, &pb,&dstaddr,dst_port);
    //udp_send(pcb, &pb);

    udp_recv(pcb, RecvUTPCallBack, NULL);

    pbuf_free(pb);

    udp_remove(pcb);


}

// Function gets called when we recieve data
err_t RecvUTPCallBack(void *arg, struct udp_pcb *upcb, struct pbuf *p, struct ip_addr *addr, u16_t port){
    RIT128x96x4Enable(1000000);
    RIT128x96x4StringDraw("ENTERING CALLBACK", 40, 40, 11);


    volatile int totaal_lengte=0;
    totaal_lengte = p->tot_len;
    volatile int line=40;

    while(1){

        RIT128x96x4Enable(1000000);
        RIT128x96x4StringDraw(p->payload+1, 0, line, 15);
        line+=8;
        if(p->len != p->tot_len){
            p=p->next;
        }
        else break;
    }
    pbuf_free(p);
}

完整程序代码:http://codepaste.net/uuy8sg

EN

回答 3

Stack Overflow用户

发布于 2013-01-06 20:49:57

我觉得你有种族问题。

您正在注册回调,但是在发送数据包之后,您立即退出sendUDP()函数,这反过来会导致main()结束。

你需要提供一些时间,在响应到来之前可能需要数百毫秒,并且你永远不会等待它的发生。

我不熟悉你正在使用的eCosPro操作系统,但应该有一些“睡眠”调用,让你的程序空闲,让系统有机会监听响应并触发回调。

此外,我认为您需要调用更多的i UDP,如udp_init()来设置nitialization functions支持。

票数 1
EN

Stack Overflow用户

发布于 2021-11-08 15:20:48

我知道这是个很老的问题但是..。

dst_port不应是指针。

代码语言:javascript
复制
//u16_t * dst_port;
u16_t dst_port;
dst_port = 123;

这一行可能是导致问题的原因:

代码语言:javascript
复制
udp_bind(pcb,&srcaddr,&dst_port);

它应该是

代码语言:javascript
复制
udp_bind(pcb,&srcaddr, dst_port);
票数 0
EN

Stack Overflow用户

发布于 2015-11-12 14:58:32

更改自:

代码语言:javascript
复制
udp_bind(pcb,&srcaddr,&dst_port);
udp_connect(pcb,&dstaddr,&dst_port);

至:

代码语言:javascript
复制
udp_bind(pcb,&srcaddr,dst_port);
//udp_connect(pcb,&dstaddr,dst_port);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14182075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档