6

我需要在主机上的所有可用地址上发送相同的多播 UDP 数据包。我需要发送到localhost/127.0.0.1239.255.0.1. Rust 的std库自 1.2 版以来已弃用多播行为,无论如何,为了获得我需要的特异性,我必须切换到更完整的net2.

net2API 有一堆提供我正在寻找的 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();
}

如果这有什么不同,我会在夜间进行编译。

4

0 回答 0