6

ホストで使用可能なすべてのアドレスで同じマルチキャスト UDP パケットを送信する必要があります。localhost/127.0.0.1とに送信する必要があり239.255.0.1ます。Rust のstdlib は、バージョン 1.2 以降、マルチキャストの動作を非推奨にしています。とにかく、必要な特異性を得るには、より完全な .xml に切り替える必要がありますnet2

API には、私が探している API を提供するUDP 拡張機能net2がたくさんあります。特に興味があるのは

fn join_multicast_v4(&self, multiaddr: &Ipv4Addr, interface: &Ipv4Addr) -> Result<()>

しかし、multiaddr と interface で何をすべきかわかりません。127.0.0.1multiaddr を指定するだけだと思ってい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();
}

それが違いを生むなら、私はナイトリーでコンパイルしています。

4

0 に答える 0