通过 lwIP 通过以太网 UDP 发送数据问题

问题描述 投票:0回答:1

我正在尝试使用 UDP 的

lwIP
库发送消息。我使用的是 TMS570LS3137 微处理器。由于管理
lwIP
的内容很复杂,我通过改变 sys_main.c 来使用
这个示例项目

在我构建下面的代码并调试后,我的 while 循环可以工作,但当我尝试查看 WireShark 的输出时,我没有看到任何 UDP 消息。

这里可能出现什么问题?

#include "lwip/udp.h"
#include <stdint.h>
#include <string.h> // For strlen
#include "lwip/init.h" // For lwip_init
#include "lwip/tcpip.h" // For sys_check_timeouts
#include "lwip/sys.h"
#include <stdio.h> // For printf

// Function to send a UDP message
void send_udp_message(struct udp_pcb *pcb) {
    struct pbuf *p;
    const char *message = "Hello, UDP!";

    // Create a pbuf to hold the message data
    p = pbuf_alloc(PBUF_TRANSPORT, strlen(message), PBUF_RAM);
    if (p != NULL) {
        // Copy the message data into the pbuf payload
        memcpy(p->payload, message, strlen(message));

        // Send the pbuf over the UDP connection
        udp_send(pcb, p);

        // Free the pbuf
        pbuf_free(p);
    }
}

void simple_delay(uint32_t milliseconds) {
    volatile uint32_t i, j;
    for (i = 0; i < milliseconds; i++) {
        for (j = 0; j < 4000; j++) {
            // Adjust the inner loop count based on your system's clock frequency
            __asm("nop");
        }
    }
}

int main() {
    struct udp_pcb *pcb;

    // Initialize lwIP
    lwip_init();

    // Create a new UDP pcb
    pcb = udp_new();

    int i = 0;

    if (pcb != NULL) {
        // Bind the UDP pcb to a local port
        udp_bind(pcb, IP_ADDR_ANY, 12345);

        // Set the remote IP address and port
        ip_addr_t remote_ip;
        IP4_ADDR(&remote_ip, 255, 255, 255, 255);
        udp_connect(pcb, &remote_ip, 54321);

        // Main loop
        while (1) {
            // Send the UDP message
            send_udp_message(pcb);

            // Main lwIP processing
            sys_check_timeouts();

            // Delay to control the rate of message sending
            simple_delay(1000);
            i++;
            printf("Cycle - %d\n", i);
        }
    }

    return 0;

}

c embedded udp lwip
1个回答
0
投票

您应该在这里检查几件事

  1. ping
    工作正常吗?
  2. 您已将远程IP地址设置为
    255.255.255.255
    ,即广播地址。您已连接到特定设备,因此您应该将消息发送到特定 IP 地址。
  3. 不要使用
    strlen(message)
    作为长度,而是使用
    strlen(message) + 1
    来包含空终止符。
  4. 检查防火墙,是否有阻塞。
© www.soinside.com 2019 - 2024. All rights reserved.