esp8266ex java编程_在esp8266上发送多播?

在使用ESP8266和NonOSSDKv2.0.0_16_08_10进行开发时,遇到一个发送UDP多播消息的难题。尽管能够成功接收多播并发送单播,但无法通过Wireshark捕获发送的多播消息。已经尝试了加入组播组,并正确配置了组播IP地址和端口。问题可能出在发送回调函数中,消息显示已发送,但实际网络上未检测到。目前需要进一步排查发送过程中的网络配置或代码实现。
摘要由CSDN通过智能技术生成

我正在研究esp8266,nonos sdk v 2.0.0_16_08_10,本机c . 我正在通过wireshark监控网络 .

我正在尝试通过udp发送多播消息 .

接收udp多播是有效的 . 发送udp单播有效 . 发送udp多播不起作用 .

在我的udp发送回调函数中,指示消息已发送,但我无法通过wireshark捕获它 .

组播IP地址:224.0.1.187组播端口:5683

加入组播组:

uint32_t mip = wifi_get_ip();

if(mip == 0){

os_printf("ERROR MULTICAST JOIN mip==0\n");

return;

}

ip_addr_t local, remote;

remote.addr = ocf_mgroup.ip.full;

local.addr = mip;

os_printf("multicast result = %d\n", espconn_igmp_join(&local, &remote));

打开UDP通道:

uint8_t ICACHE_FLASH_ATTR udp_open(uint8_t ch_no, uint8_t ch_id, uint32_t src_addr, uint16_t src_port, uint32_t dst_addr, uint16_t dst_port){

//ALLOC MEM

udp_conn[ch_no] = (struct espconn*) os_malloc(sizeof(struct espconn));

udp_info[ch_no] = (esp_udp*) os_malloc(sizeof(esp_udp));

//CHANNEL

//ports

udp_info[ch_no]->remote_port = dst_port;

udp_info[ch_no]->local_port = src_port;

//ips

udp_info[ch_no]->remote_ip[0] = (dst_addr) & 0xff;

udp_info[ch_no]->remote_ip[1] = (dst_addr >> 8) & 0xff;

udp_info[ch_no]->remote_ip[2] = (dst_addr >> 16) & 0xff;

udp_info[ch_no]->remote_ip[3] = (dst_addr >> 24) & 0xff;

udp_info[ch_no]->local_ip[0] = (src_addr) & 0xff;

udp_info[ch_no]->local_ip[1] = (src_addr >> 8) & 0xff;

udp_info[ch_no]->local_ip[2] = (src_addr >> 16) & 0xff;

udp_info[ch_no]->local_ip[3] = (src_addr >> 24) & 0xff;

//connection

udp_conn[ch_no]->type = ESPCONN_UDP;

udp_conn[ch_no]->state = ESPCONN_NONE;

udp_conn[ch_no]->proto.udp = udp_info[ch_no];

udp_conn[ch_no]->link_cnt = ch_id;

//HANDLERS

espconn_regist_recvcb(udp_conn[ch_no], udp_receive_handler);

//on send successfull

espconn_regist_sentcb(udp_conn[ch_no], udp_send_handler);

//CRAETE

return espconn_create(udp_conn[ch_no]);

}

发送消息到ip:port:

uint8_t ICACHE_FLASH_ATTR udp_send_cfg(uint8_t ch_no, uint8_t* data, uint16_t len, uint32_t dst_ip, uint16_t dst_port){

udp_conn[ch_no]->proto.udp->remote_port = dst_port;

udp_conn[ch_no]->proto.udp->remote_ip[0] = dst_ip & 0xFF;

udp_conn[ch_no]->proto.udp->remote_ip[1] = (dst_ip >> 8) & 0xFF;

udp_conn[ch_no]->proto.udp->remote_ip[2] = (dst_ip >> 16) & 0xFF;

udp_conn[ch_no]->proto.udp->remote_ip[3] = (dst_ip >> 24) & 0xFF;

return espconn_sent(udp_conn[ch_no], data, len);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值