gpt4 book ai didi

c - ESP32 - 带有本地 LwIP 库的 UDP 广播器/接收器

转载 作者:行者123 更新时间:2023-12-03 20:17:49 24 4
gpt4 key购买 nike

我正在使用 ESP32(一个很棒的平台 btw)构建一个分布式应用程序,所有参与者都应该以最简单的形式通过 UDP 进行通信:通过广播发送消息并收听所有 float 的消息。每个参与者自己过滤相关消息。

到目前为止,我有以下初始化例程:

int lavor_wifi_openUDPsocket(){
// Create a socket
int sckt = socket(AF_INET, SOCK_DGRAM, 0);
if ( sckt < 0 ){
printf("socket call failed");
exit(0);
}

// Prepare binding to port
struct sockaddr_in sLocalAddr;
// Initialize the address
memset((char *)&sLocalAddr, 0, sizeof(sLocalAddr));

sLocalAddr.sin_family = AF_INET;
sLocalAddr.sin_len = sizeof(sLocalAddr);
sLocalAddr.sin_addr.s_addr = htonl(INADDR_ANY);
sLocalAddr.sin_port = UDP_SOCKET_PORT;

bind(sckt, (struct sockaddr *)&sLocalAddr, sizeof(sLocalAddr));

return sckt;
}

然后,将发送一条消息:

void lavor_wifi_sendUDPmsg(int sckt, char* msg, int len){
// Prepare the address to sent to via BROADCAST
struct sockaddr_in sDestAddr;
// Initialize the address
// memset((char *)&sDestAddr, 0, sizeof(sDestAddr));

sDestAddr.sin_family = AF_INET;
sDestAddr.sin_len = sizeof(sDestAddr);
sDestAddr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
sDestAddr.sin_port = UDP_SOCKET_PORT;

if(sendto(sckt, msg, len, 0, (struct sockaddr *)&sDestAddr, sizeof(sDestAddr)) < len){
printf("UDP message couldn't be sent.");
}
}

最后,接收消息会像这样工作:

void lavor_wifi_processor(void* sckt){
int nbytes;
char buffer[UDP_BUFF_LEN];
// Listen for incoming messages as long as the socket is open
while(1){ // TO DO: Test if socket open
// Try to read new data arrived at the socket
nbytes = recv(*((int *)sckt), buffer, sizeof(buffer), 0);
...

但即使我只是尝试调用上面的初始化函数,ESP 也会疯狂地抛出一个又一个 Guru Meditation 错误。

有没有人以描述的方式使用过 UDP 通信?

最佳答案

我使用 ESP32/UDP/LWIP 使用 UDP 来处理这个例子:

https://github.com/Ebiroll/qemu_esp32/blob/master/examples/19_udp

请注意,在我们收到 ip 地址之前,send_thread() 不会启动。

然而,您也可能需要 esp-idf v2.0。我也遇到了最新版本的 Guru Meditation 错误。

关于c - ESP32 - 带有本地 LwIP 库的 UDP 广播器/接收器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44399443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com