70个版本

0.29.2 2024年8月20日
0.29.1 2024年6月22日
0.28.0 2024年4月24日
0.27.1 2024年1月2日
0.4.1 2019年6月26日

#1052 in 网络编程

Download history 23747/week @ 2024-05-01 25020/week @ 2024-05-08 25834/week @ 2024-05-15 26214/week @ 2024-05-22 28501/week @ 2024-05-29 30148/week @ 2024-06-05 26958/week @ 2024-06-12 28244/week @ 2024-06-19 26745/week @ 2024-06-26 28256/week @ 2024-07-03 30943/week @ 2024-07-10 35093/week @ 2024-07-17 34677/week @ 2024-07-24 36125/week @ 2024-07-31 38005/week @ 2024-08-07 30708/week @ 2024-08-14

146,406 monthly downloads
88 个crate中使用 (2直接)

BSD-2-Clause

33KB
606

std::net::TcpStream的增强版

API Docs Build status Downloads

tcp-stream是一个库,旨在为std::net::TcpStream提供TLS支持

关于rustls加密后端的警告

必须使用功能标志在rustls中启用加密实现。我们模仿rustls的行为,为每个实现提供一个功能标志,默认情况下与rustls相同。可用的选项有

  • rustls--aws_lc_rs (默认)
  • rustls--ring

示例

连接到远程服务器

use tcp_stream::{HandshakeError, TcpStream, TLSConfig};

use std::io::{self, Read, Write};

fn main() {
    let stream = TcpStream::connect("google.com:443").unwrap();
    let mut stream = stream.into_tls("google.com", TLSConfig::default());

    while let Err(HandshakeError::WouldBlock(mid_handshake)) = stream {
        stream = mid_handshake.handshake();
    }

    let mut stream = stream.unwrap();

    while let Err(err) = stream.write_all(b"GET / HTTP/1.0\r\n\r\n") {
        if err.kind() != io::ErrorKind::WouldBlock {
            panic!("error: {:?}", err);
        }
    }
    stream.flush().unwrap();
    let mut res = vec![];
    while let Err(err) = stream.read_to_end(&mut res) {
        if err.kind() != io::ErrorKind::WouldBlock {
            panic!("stream error: {:?}", err);
        }
    }
    println!("{}", String::from_utf8_lossy(&res));
}

依赖项

~0–19MB
~369K SLoC