1

我正在使用 Cortex M3、Stellaris® LM3S6965 评估板。我正在向我的电脑发送一个 UDP 数据包。那行得通,因为我用wireshark检查了它。但我看到的是我没有源端口。我不知道如何解决这个问题。

我调用这个函数来发送一个 udp 数据包

void send_udp(){
    RIT128x96x4Enable(1000000);
    RIT128x96x4StringDraw("UDP data verzonden..", 0, 40, 15);

    struct ip_addr  serverIp;
    IP4_ADDR(&serverIp,192,168,1,100);

    u16_t port;
    port = 64000;
    struct udp_pcb * pcb;
    pcb = udp_new();

    udp_bind(pcb, &serverIp, port);
    udp_recv(pcb, udp_echo_recv, NULL);
    struct pbuf *p;
    char msg[]="request";

    //Allocate packet buffer
    p = pbuf_alloc(PBUF_TRANSPORT,sizeof(msg),PBUF_RAM);
    memcpy (p->payload, msg, sizeof(msg));
    udp_sendto(pcb, p, &serverIp, port);
    pbuf_free(p); //De-allocate packet buffer
}

Wireshark 数据包示例:(点此放大) 这里

4

2 回答 2

2

调用udp_bind()应该分配本地端口,但它似乎对你来说失败了。

您使用的数字 (64000) 在称为动态、私有或临时端口的范围内,这可能是它无法按预期工作的原因。

从文档看,udp_bind()支持端口号0获取动态分配的号码;如果源端口不重要,这通常是要走的路。

于 2013-01-08T12:24:08.997 回答
1

我还看到 ipv4 pcb 中的“生存时间”为 0。所以我添加了这一行,

pcb->ttl = UDP_TTL; // Time to live

这解决了我的问题

于 2013-01-10T10:39:22.570 回答