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 中的套接字服务器不接收的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 iOS 中的套接字从服务器接收数据?

Python 套接字中的发送和接收是如何工作的?

Rust 所有权问题

从套接字接收线程中的消息

C中的服务器/套接字编程:数据未正确发送/接收?

UDP和套接字,recvfrom()返回-1,资源暂时不可用