#tcp-udp #tcp #udp #networking

stmc

简单的TCP/UDP消息通信包装器

6个版本

0.2.3 2022年11月12日
0.2.2 2022年11月12日
0.1.1 2022年11月11日

1269编码

每月47次下载

MIT许可证

9KB
165

仅仅是一个简单的TCP/UDP消息通信包装器。使用serdebincode格式中进行数据序列化。需要类型派生serde::Serialize用于发送和serde:Deserialize用于接收消息。

考虑以下枚举

use serde::{Serialize, Deserialize};

#[derive(Debug, Serialize, Deserialize, PartialEq)]
enum Chat {
    Connect,
    Msg(String),
    Close,
}

接收消息

use std::{io, net::TcpListener};
use stmc::tcp;

fn main() -> io::Result<()> {
    let listener = TcpListener::bind(("127.0.0.1", 8080))?;
    'server: for mut stream in listener.incoming().flatten() {
        loop {
            let msg: Chat = tcp::read(&mut stream)?;
            match msg {
                Chat::Connect => println!("new user connect: {}", stream.ttl()?),
                Chat::Msg(txt) => println!("new message from {}: {txt}", stream.ttl()?),
                Chat::Close => break 'server,
            }
        }
    }
    Ok(())
}

发送消息

use serde::{Deserialize, Serialize};
use std::{io, net::TcpStream};

fn main() -> io::Result<()> {
    let mut stream = TcpStream::connect(("127.0.0.1", 8080))?;
    tcp::send(Chat::Connect, &mut stream)?;
    tcp::send(Chat::Msg("hi".into()), &mut stream)?;
    tcp::send(Chat::Close, &mut stream)?;
    Ok(())
}

要使用UDP协议,只需将tcp改为udp

依赖项

~0.6–1.2MB
~28K SLoC