ホストで使用可能なすべてのアドレスで同じマルチキャスト UDP パケットを送信する必要があります。localhost
/127.0.0.1
とに送信する必要があり239.255.0.1
ます。Rust のstd
lib は、バージョン 1.2 以降、マルチキャストの動作を非推奨にしています。とにかく、必要な特異性を得るには、より完全な .xml に切り替える必要がありますnet2
。
API には、私が探している API を提供するUDP 拡張機能net2
がたくさんあります。特に興味があるのは
fn join_multicast_v4(&self, multiaddr: &Ipv4Addr, interface: &Ipv4Addr) -> Result<()>
しかし、multiaddr と interface で何をすべきかわかりません。127.0.0.1
multiaddr を指定するだけだと思ってい239.255.0.1
ましたが、パラメーターの有効な IPv4 を見つけるにはどうすればよいinterface
ですか? を提供できるRust関数はどこかにありVec<Ipv4Addr>
ますか?の出力を解析する必要がありifconfig
ますか?
これは、私のパブリック インターフェイスを送信するスタンドアロン プログラムです (その192.168.0.102
アドレスを手動で見つける必要がありました)。
extern crate net2;
use std::net::{ UdpSocket, Ipv4Addr };
use net2::UdpSocketExt;
fn main() {
let sock = UdpSocket::bind("0.0.0.0:2345").unwrap();
let local_addr = Ipv4Addr::new(192, 168, 0, 102);
let multicast_addr = Ipv4Addr::new(239, 255, 0, 1);
sock.join_multicast_v4(&multicast_addr, &local_addr).unwrap();
}
それが違いを生むなら、私はナイトリーでコンパイルしています。