2017-03-13 1 views
1

저는 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); 
} 
+2

[최소, 완전하며 검증 가능한 예제를 만드는 방법] (https://stackoverflow.com/help/mcve) –

+0

죄송합니다.이 정보로 충분합니다. 코드가 곧 추가됩니다. –

+0

@InvaderZim, 필요한 환경을 가진 관심있는 사람들이 복사하여 붙여 넣기를하고 코드를 즉시 실행하고보고있는 내용을 볼 수 있다면 도움이됩니다. – sigjuice

답변

1

인터넷에서 광범위하게 검색 한 결과, soft-ap는 멀티 캐스트 전송에 문제가 있음을 발견했습니다.

내 코드는 플래시에서 구성을 읽으므로 ap 구성이 NULL이며 하드 코드가 문제없이 전송 중입니다.

그래서, 다음과 같은 기능을 피하기 : 나는 또한 소프트 AP의 DHCP 구체적으로이 문제를 일으키는 것을 발견

wifi_set_opmode(STATIONAP_MODE) 
wifi_set_opmode(SOFTAP_MODE) 
wifi_softap_foo 

을하고이 설정되지 않은 경우 가끔 멀티 캐스트 메시지를 보낼 수 있지만, 때때로 나는 할 수 없었다.

내가 아는 정보는 Arduino이지만, native C에서도 작동하는 것으로 보입니다.

관련 문제