我需要在主机上的所有可用地址上发送相同的多播UDP数据包。我需要发送到localhost
/ 127.0.0.1
和239.255.0.1
。从版本1.2开始,Rust的std
lib已弃用组播行为,无论如何,为了获得我需要的特异性,我必须切换到更完整的net2
。
net2
API有一堆UDP extensions,提供我正在寻找的API。我对
fn join_multicast_v4(&self, multiaddr: &Ipv4Addr, interface: &Ipv4Addr) -> Result<()>
但是我无法弄清楚如何处理multiaddr vs interface。我想我会给出multiaddr 127.0.0.1
或239.255.0.1
,但如何找到interface
参数的有效IPv4?是否有一个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();
}
如果有任何不同,我会在夜间进行编译。