Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpSoCl 258 of 288 menu
◀ ▶

Клиент TCP в Rust

Клиентская сторона начинается с указания адреса в виде строки с хостом и портом. После успешного рукопожатия программа получает поток, через который можно отправлять данные на другой конец.

Подключим модуль сети и откроем поток к локальному порту семь тысяч:

use std::io::Write; use std::net::TcpStream; fn main() { let mut stream = match TcpStream::connect("127.0.0.1:7000") { Ok(s) => s, Err(e) => { eprintln!("connect error: {}", e); return; } }; match stream.write_all(b"hello") { Ok(()) => println!("sent"), Err(e) => eprintln!("write error: {}", e), } }

Запись целиком отправляет все байты или возвращает ошибку. Пока сервер на том адресе не слушает, подключение завершится неудачей, и это видно в ветке сопоставления.

Тот же поток можно использовать повторно, если нужно отправить еще одну порцию:

use std::io::Write; use std::net::TcpStream; fn main() { let mut stream = match TcpStream::connect("127.0.0.1:7000") { Ok(s) => s, Err(e) => { eprintln!("connect error: {}", e); return; } }; match stream.write_all(b"first") { Ok(()) => {} Err(e) => { eprintln!("write error: {}", e); return; } } match stream.write_all(b"second") { Ok(()) => println!("done"), Err(e) => eprintln!("write error: {}", e), } }

Дан адрес:

let addr = "127.0.0.1:7000";

Откройте исходящий поток к этому адресу и отправьте байты строки ping. При успешной записи выведите ok.

Дан адрес:

let addr = "127.0.0.1:7000";

Попробуйте подключиться, когда на порту никто не слушает, и напечатайте fail в ветке ошибки открытия потока.

Скажите, чем запись всего буфера сразу отличается от записи по одному байту для сетевого потока.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить