3个版本 (稳定版)

1.3.171 2021年8月29日
0.1.0 2021年8月29日

网络编程类别中排名第1812

ISC授权

235KB
5K SLoC

C 4K SLoC // 0.1% comments Rust 790 SLoC // 0.3% comments Lua 36 SLoC Automake 18 SLoC

包含(模糊的autoconf代码,1KB)vendor/enet/configure.ac

enet-rs

Documentation Crates.io License

ENet库的Rust绑定,ENet是一个可靠的UDP网络库。

安装

将以下内容添加到您的Cargo.toml文件中

[dependencies]
enet-rs = "1.3.17"

示例

server.rs:

use enet_rs::enet::{
    ENET_HOST_ANY,
    ENetAddress,
    enet_host_create,
};

fn main() {
    let address = ENetAddress {
        host: ENET_HOST_ANY,
        port: 2555
    };

    unsafe {
        let server = enet_host_create(&address,
            32,
            2,
            0,
            0);
        if server.is_null() {
            println!("An error occurred while trying to create an ENet server host.");
        }
    }
    
    loop {
        /* does nothing */
    }
}

client.rs:

use std::ptr::null;
use std::mem::MaybeUninit;
use std::ffi::CString;
use enet_rs::enet::{
    ENetEventType,
    enet_host_create,
    enet_address_set_host,
    enet_host_connect,
    enet_host_service,
    enet_peer_reset
};

fn main() {
    unsafe {
        let client = enet_host_create(null(),
            1,
            2,
            0,
            0);
        if client.is_null() {
            panic!("An error occurred while trying to create an ENet client host.")
        }

        let mut address_ = MaybeUninit::uninit();
        enet_address_set_host(address_.as_mut_ptr(), (&CString::new("127.0.0.1").unwrap()).as_ptr());
        let mut address = address_.assume_init();
        address.port = 2555;

        let peer = enet_host_connect(client, &address, 2, 0);
        if peer.is_null() {
            println!("No available peers for initiating an ENet connection.\n");
        }

        let mut event_ = MaybeUninit::uninit();
        loop {
            if enet_host_service(client, event_.as_mut_ptr(), 5000) > 0 {
                let event = event_.assume_init();
                match event.type_ {
                    ENetEventType::ENET_EVENT_TYPE_CONNECT => {
                        println!("connected to server.")
                    }
                    _ => enet_peer_reset(peer)
                }
            }
        }
    }
}

完整示例

完整的示例可以在examples目录中找到,详细介绍了库的基本功能。

文档

运行cargo doc或访问docs.rs获取文档。

授权

enet-rs授权使用ISC授权。更多信息请参阅LICENSE.md文件。

依赖

~0.4–270KB