私は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);
}
[最小限で完全で検証可能な例の作成方法](https://stackoverflow.com/help/mcve) –
を参照してください。申し訳ありませんが、この情報で十分です。すぐにコードを追加します。 –
@InvaderZim、これは、必要な環境を持つ関心のある人々が単純にコピー&ペーストしてコードをすぐに実行し、あなたが見ているものを見ることができる場合に役立ちます。 – sigjuice