我需要在主机上的所有可用地址上发送相同的多播 UDP 数据包。我需要发送到localhost
/127.0.0.1
和239.255.0.1
. Rust 的std
库自 1.2 版以来已弃用多播行为,无论如何,为了获得我需要的特异性,我必须切换到更完整的net2
.
net2
API 有一堆提供我正在寻找的 API的UDP 扩展。我特别感兴趣
fn join_multicast_v4(&self, multiaddr: &Ipv4Addr, interface: &Ipv4Addr) -> Result<()>
但我不知道如何处理 multiaddr vs interface。我以为我会给出 multiaddr127.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();
}
如果这有什么不同,我会在夜间进行编译。