我正在尝试使用 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;
}
您应该在这里检查几件事
ping
工作正常吗?255.255.255.255
,即广播地址。您已连接到特定设备,因此您应该将消息发送到特定 IP 地址。strlen(message)
作为长度,而是使用 strlen(message) + 1
来包含空终止符。