2017-03-13 31 views
1

私はesp8266、nonos sdk v 2.0.0_16_08_10、native cで作業しています。 私はwireshark経由でネットワークを監視しています。esp8266でマルチキャストを送信しますか?

私はudp経由でマルチキャストメッセージを送信しようとしています。

udpマルチキャストを受信すると動作します。 udpユニキャストを送信しています。 udpマルチキャストの送信が機能しません。

私のudp sendコールバック関数では、メッセージが送信されたことが示されていますが、wireshark経由でキャッチできません。

マルチキャストIPアドレス:224.0.1.187 マルチキャストポート:腹腔にメッセージを送信する

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であり、マルチキャストが問題なく送信されていることをハードコーディングしました。だから、

、以下の機能を避ける:

wifi_set_opmode(STATIONAP_MODE) 
wifi_set_opmode(SOFTAP_MODE) 
wifi_softap_foo 

私もソフトAPのDHCPは特にこの問題を引き起こしていることを発見し、それがオンになっていないときに時々私はマルチキャストメッセージを送ることができ、時には私はできませんでした。

私が見つけた情報はArduinoのものですが、ネイティブcの場合も同様です。

関連する問題