Rust std::net::UdpSocket 没有名为 recv_from 的方法
Rust std::net::UdpSocket no method named recv_from
我正在研究 simple example 以创建 rust udp client/server 应用程序。但是当尝试使用 send_to 或 recv_from 方法时,我收到以下错误:
[E0599] 在当前范围内找不到类型 std::result::Result<std::net::UdpSocket, std::io::Error>
的名为 send_to
的方法。
我没有以任何方式更改 cargo.toml 文件,但是我没想到我必须这样做,因为我使用的是 rust 版本 1.35.0 的标准库。
客户端和服务器都是使用 cargo new [filename] --bin 创建的,代码在 main.rs
客户
use std::net::{Ipv4Addr, SocketAddrV4, UdpSocket};
use std::io;
fn snd() -> Result<(), io::Error> {
// Define the local connection (to send the data from)
let ip = Ipv4Addr::new(127, 0, 0, 1);
let connection = SocketAddrV4::new(ip, 9992);
// Bind the socket
// let socket = try!(UdpSocket::bind(connection));
let socket = UdpSocket::bind(connection);
// Define the remote connection (to send the data to)
let connection2 = SocketAddrV4::new(ip, 9991);
// Send data via the socket
let buf = &[0x01, 0x02, 0x03];
socket.send_to(buf, &connection2);
println!("{:?}", buf);
Ok(())
}
fn main() {
match snd() {
Ok(()) => println!("All snd-ing went well"),
Err(err) => println!("Error: {:?}", err),
}
}
服务器
use std::net::{Ipv4Addr, SocketAddrV4, UdpSocket};
use std::io;
fn recv() -> Result<(), io::Error> {
// Define the local connection information
let ip = Ipv4Addr::new(127, 0, 0, 1);
let connection = SocketAddrV4::new(ip, 9991);
// Bind the socket
// let socket = try!(UdpSocket::bind(connection));
let socket = UdpSocket::bind(connection);
// Read from the socket
let mut buf = [0; 10];
// let (amt, src) = try!(socket.recv_from(&mut buf));
let (amt, src) = socket.recv_from(&mut buf).expect("Didn't recieve data");
// Print only the valid data (slice)
println!("{:?}", &buf[0 .. amt]);
Ok(())
}
fn main() {
match recv() {
Ok(()) => println!("All recv-ing went well"),
Err(err) => println!("Error: {:?}", err),
}
}
我在使用 cargo build 时在服务器端也出现以下错误。
[E0599] 在当前范围内找不到类型 std::result::Result<std::net::UdpSocket, std::io::Error>
的名为 recv_from
的方法。
编辑:
这似乎是忘记在 UdpSocket::bind 中处理 return 中的错误处理的结果。 post 中对此进行了更详细的讨论
如下所述。
这个问题基本上完好无损,因为我没有看到很多明确处理 net::UdpSocket
的问题或例子
let socket = UdpSocket::bind(connection);
这个调用returns Result
可以代表成功值或错误值。 unwrap()
强制它产生成功值(Ok
的内容)。如果出现错误,它也会出现恐慌(值为 Err
)。
let socket = UdpSocket::bind(connection).unwrap();
或者您也可以使用 expect,它会在恐慌之前打印消息。
let socket = UdpSocket::bind(connection).expect("failed to bind host socket");
我正在研究 simple example 以创建 rust udp client/server 应用程序。但是当尝试使用 send_to 或 recv_from 方法时,我收到以下错误:
[E0599] 在当前范围内找不到类型 std::result::Result<std::net::UdpSocket, std::io::Error>
的名为 send_to
的方法。
我没有以任何方式更改 cargo.toml 文件,但是我没想到我必须这样做,因为我使用的是 rust 版本 1.35.0 的标准库。
客户端和服务器都是使用 cargo new [filename] --bin 创建的,代码在 main.rs
客户
use std::net::{Ipv4Addr, SocketAddrV4, UdpSocket};
use std::io;
fn snd() -> Result<(), io::Error> {
// Define the local connection (to send the data from)
let ip = Ipv4Addr::new(127, 0, 0, 1);
let connection = SocketAddrV4::new(ip, 9992);
// Bind the socket
// let socket = try!(UdpSocket::bind(connection));
let socket = UdpSocket::bind(connection);
// Define the remote connection (to send the data to)
let connection2 = SocketAddrV4::new(ip, 9991);
// Send data via the socket
let buf = &[0x01, 0x02, 0x03];
socket.send_to(buf, &connection2);
println!("{:?}", buf);
Ok(())
}
fn main() {
match snd() {
Ok(()) => println!("All snd-ing went well"),
Err(err) => println!("Error: {:?}", err),
}
}
服务器
use std::net::{Ipv4Addr, SocketAddrV4, UdpSocket};
use std::io;
fn recv() -> Result<(), io::Error> {
// Define the local connection information
let ip = Ipv4Addr::new(127, 0, 0, 1);
let connection = SocketAddrV4::new(ip, 9991);
// Bind the socket
// let socket = try!(UdpSocket::bind(connection));
let socket = UdpSocket::bind(connection);
// Read from the socket
let mut buf = [0; 10];
// let (amt, src) = try!(socket.recv_from(&mut buf));
let (amt, src) = socket.recv_from(&mut buf).expect("Didn't recieve data");
// Print only the valid data (slice)
println!("{:?}", &buf[0 .. amt]);
Ok(())
}
fn main() {
match recv() {
Ok(()) => println!("All recv-ing went well"),
Err(err) => println!("Error: {:?}", err),
}
}
我在使用 cargo build 时在服务器端也出现以下错误。
[E0599] 在当前范围内找不到类型 std::result::Result<std::net::UdpSocket, std::io::Error>
的名为 recv_from
的方法。
编辑:
这似乎是忘记在 UdpSocket::bind 中处理 return 中的错误处理的结果。 post 中对此进行了更详细的讨论
这个问题基本上完好无损,因为我没有看到很多明确处理 net::UdpSocket
的问题或例子let socket = UdpSocket::bind(connection);
这个调用returns Result
可以代表成功值或错误值。 unwrap()
强制它产生成功值(Ok
的内容)。如果出现错误,它也会出现恐慌(值为 Err
)。
let socket = UdpSocket::bind(connection).unwrap();
或者您也可以使用 expect,它会在恐慌之前打印消息。
let socket = UdpSocket::bind(connection).expect("failed to bind host socket");