저는 esp8266, nonos sdk v 2.0.0_16_08_10, native c에서 작업하고 있습니다. c. wireshark를 통해 네트워크를 모니터링하고 있습니다.esp8266에서 멀티 캐스트를 보냅니 까?
udp를 통해 멀티 캐스트 메시지를 보내려고합니다.
수신 udp 멀티 캐스트가 작동합니다. udp 유니 캐스트를 보내는 중입니다. udp 멀티 캐스트 전송이 작동하지 않습니다.
내 udp send 콜백 함수에서 메시지가 전송되었음을 나타내지 만 wireshark를 통해 catch 할 수 없습니다.
멀티 캐스트 IP 주소 224.0.1.187 캐스트 포트 등급 : IP에 메시지를 전송
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]);
}
: 일 : UDP 채널을 개방형
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));
: 5683
가입 캐스트 그룹 포트 :
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);
}
[최소, 완전하며 검증 가능한 예제를 만드는 방법] (https://stackoverflow.com/help/mcve) –
죄송합니다.이 정보로 충분합니다. 코드가 곧 추가됩니다. –
@InvaderZim, 필요한 환경을 가진 관심있는 사람들이 복사하여 붙여 넣기를하고 코드를 즉시 실행하고보고있는 내용을 볼 수 있다면 도움이됩니다. – sigjuice