c - 发送 udp 数据的空源端口(lwip、Cortex M3、Stellaris LM3S6965 评估板)

标签 c sockets udp port lwip

我正在使用 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 示例:(click here to enlarge) here

最佳答案

调用<a href="http://www.ecoscentric.com/ecospro/doc/html/ref/lwip-api-raw-udp-bind.html" rel="noreferrer noopener nofollow">udp_bind()</a>应该分配本地端口,但它似乎对你来说失败了。

您使用的号码 (64000) 在称为 dynamic, private or ephemeral ports 的范围内,这可能就是它没有按预期工作的原因。

来自文档,udp_bind()支持端口号0获取动态分配的号码;如果源端口不重要,这通常是可行的方法。

关于c - 发送 udp 数据的空源端口(lwip、Cortex M3、Stellaris LM3S6965 评估板),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14214782/

相关文章:

node.js - 用 nets 和 nodejs 堆叠字符串

javascript - net::ERR_NETWORK_CHANGED 在 Chrome 上的 Https 套接字连接

c - 从 C 套接字上的传入流中提取数据(字符串、字符等)

objective-c - 如何对 Internet 协议(protocol)实现进行单元测试?

java - 如何用 Java 创建简单的 UDP 客户端-服务器通信?

c# - 在C#中连接到Udp服务器的客户端列表

c - 我是否要转换 malloc 的结果?

c++ - 如何从 C 调用 AWS CPP SDK 函数

Java调用API : Call the C function back from the java code

c++ - 我能否确定从文件中读取的 32 字节二进制数据等于 256 位?