UdpSocket.send_to以"无效参数"失败

 罗然8_907 发布于 2022-12-13 11:10

我在使用Rust尝试使用BitTorrent跟踪器协议时遇到了这个问题.

这个应该使用UDP套接字发送一些数据的简单程序失败了:

use std::collections::HashSet;
use std::io::net::addrinfo;
use std::io::net::ip::{Ipv4Addr, SocketAddr, IpAddr};
use std::io::net::udp::UdpSocket;

fn main() {
    let addr = SocketAddr { ip: Ipv4Addr(127, 0, 0, 1), port: 34254 };
    let mut socket = match UdpSocket::bind(addr) {
        Ok(s) => s,
        Err(e) => panic!("couldn't bind socket: {}", e),
    };

    let host_addr = "tracker.openbittorrent.com";
    let port = "80";

    let host_ips: HashSet =
        addrinfo::get_host_addresses(host_addr.as_slice()).unwrap().into_iter().collect();

    for host_ip in host_ips.into_iter() {
        let socket_addr = SocketAddr {
            ip: host_ip,
            port: from_str(port).unwrap(),
        };
        println!("Sending to {}", socket_addr);
        let data: &[u8] = [0x1, 0x2, 0x3];
        println!("{}", socket.send_to(data, socket_addr));
    }
}

输出:

Sending to 31.172.63.252:80
Err(invalid argument (Invalid argument))
Sending to 31.172.63.253:80
Err(invalid argument (Invalid argument))

关于出了什么问题的任何想法?

1 个回答
  • 您正在将套接字绑定到localhost(环回接口),然后尝试通过该套接字与不在该接口上的地址进行通信.如果您改为绑定0.0.0.0,它将成功.这意味着"所有ipv4接口".如有必要,您可以绑定到更具体的地址.

    2022-12-13 15:40 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有