ys memos

Blog

RustのTCP Clientを使う


rust

2022/09/12


Rust における TCP クライアントの使い方を解説する.

サーバについてはこちら


Cargo.toml
[package]
name = "tcp_echo_client"
version = "0.1.0"
edition = "2021"

[dependencies]
tokio = { version = "1.21", features = ["full"]}
main.rs
use tokio::{
    io::{AsyncReadExt, AsyncWriteExt},
    net::TcpStream,
};

#[tokio::main]
async fn main() -> std::io::Result<()> {
    let addr = "0.0.0.0:8080";
    let mut stream = TcpStream::connect(addr).await?;

    let msg = "Hello Tokio Socket".to_string();
    stream.write(msg.as_bytes()).await?;

    let mut buf = Vec::with_capacity(4096);
    stream.read_buf(&mut buf).await?;

    let received = String::from_utf8(buf).unwrap();
    println!("{}", received);
    Ok(())
}


use tokio::{
    io::{AsyncReadExt, AsyncWriteExt},
    net::TcpStream,
};

#[tokio::main]を使う.

?を使うために戻り地はstd::io::Result<()>とした.

#[tokio::main]
async fn main() -> std::io::Result<()> {

addrは変数にしなくてもよいが,ここでは変数にしておいた."try to connect {addr}"などでログを残すと,実行時にミスに気づきやすかったりする.

TcpStream::connect()により,接続する.

    let addr = "0.0.0.0:8080";
    let mut stream = TcpStream::connect(addr).await?;

msgString型であるので,それを&[u8]にするために.as_bytes()を使った.

    let msg = "Hello Tokio Socket".to_string();
    stream.write(msg.as_bytes()).await?;

bufを定義し,そこに読み取り結果を記録する.

    let mut buf = Vec::with_capacity(4096);
    stream.read_buf(&mut buf).await?;

String::from_utf8()により,読み取ったbufを文字列に変換する.

    let received = String::from_utf8(buf).unwrap();
    println!("{}", received);

    Ok(())
}

Rust,スゴくいいですね! 🦀


関連タグを探す