Rust 中的套接字服务器不接收
Posted
技术标签:
【中文标题】Rust 中的套接字服务器不接收【英文标题】:Socket server in Rust does not receive 【发布时间】:2019-06-15 20:23:59 【问题描述】:server.rs:
use std::net::UdpSocket;
fn main() -> std::io::Result<()>
let mut socket = UdpSocket::bind("127.0.0.1:3000")?;
let mut buf = [0; 10];
let (amt, src) = socket.recv_from(&mut buf)?;
let buf = &mut buf[..amt];
buf.reverse();
socket.send_to(buf, &src)?;
Ok(())
strace ./server
输出在这里停止:
<...>
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 3
bind(3, sa_family=AF_INET, sin_port=htons(3000), sin_addr=inet_addr("127.0.0.1"), 16) = 0
recvfrom(3,
在运行上述程序后尝试调用 echo -n "qwerty" | netcat 127.0.0.1 3000
没有任何改变。
为什么?
【问题讨论】:
echo -n "qwerty" | netcat -u 127.0.0.1 3000
UDP 当然
【参考方案1】:
默认情况下,netcat 使用 TCP。指示 netcat 改为使用 UDP 会产生预期的结果:
echo -n "qwerty" | netcat -u 127.0.0.1 3000
mcve 输出:
/home/svetlin/.cargo/bin/cargo run --color=always --package mcve --bin mcve
Finished dev [unoptimized + debuginfo] target(s) in 0.11s
Running `target/debug/mcve`
Process finished with exit code 0
【讨论】:
以上是关于Rust 中的套接字服务器不接收的主要内容,如果未能解决你的问题,请参考以下文章