1 个不稳定版本

使用旧的 Rust 2015

0.0.1 2018 年 12 月 14 日

#16#datagram

MIT 许可证

17KB
207

udpsocket2

一个更易用的 Tokio 启用 UDP 套接字。

特别关注 UDP 套接字既可以发送也可以接收数据报文,并且实际的消费者希望能够在同一个套接字上以非阻塞 I/O 的方式完成这两项操作。

extern crate futures;
extern crate udpsocket2;

use udpsocket2::UdpSocket;

fn main() -> std::io::Result<()> {

    use futures::{Future, Stream};
    use futures::future::ok;

    let socket = UdpSocket::bind("127.0.0.1:34254")?;

    tokio::run(ok(()).and_then(move |_| {

        tokio::spawn(
            socket.incoming()
                .for_each(|datagram| { println!("{:?}", datagram); Ok(()) })
                .map_err(|_| ())
        );

        tokio::spawn(
            socket.send_to(&[0xde, 0xad, 0xbe, 0xef], "127.0.0.1:34254")?
                .map_err(|_| ())
        );

        Ok(())

    }).map_err(|_: std::io::Error| ()));

    Ok(())
}

lib.rs:

一个更易用的 Tokio 启用 UDP 套接字。

特别关注 UDP 套接字既可以发送也可以接收数据报文,并且实际的消费者希望能够在同一个套接字上以非阻塞 I/O 的方式完成这两项操作。

有关更详细的信息,请参阅 UdpSocket 结构体文档。

示例

#
#
#
#
let socket = UdpSocket::bind("127.0.0.1:34254")?;
#

tokio::spawn(
    socket.incoming()
        .for_each(|datagram| { println!("{:?}", datagram); Ok(()) })
        .map_err(|_| ())
);

tokio::spawn(
    socket.send_to(&[0xde, 0xad, 0xbe, 0xef], "127.0.0.1:34254")?
        .map_err(|_| ())
);
#
#
#

依赖项

~3MB
~45K SLoC