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

Сервер TCP в Rust

Серверная сторона сначала занимает порт на выбранном хосте. Пока слушатель жив, ядро складывает входящие заявки в очередь, и программа может взять следующую, когда будет готова.

Создадим слушатель на локальном адресе и дождемся первого гостя:

use std::net::TcpListener; fn main() { let listener = match TcpListener::bind("127.0.0.1:7000") { Ok(l) => l, Err(e) => { eprintln!("bind error: {}", e); return; } }; let (stream, peer) = match listener.accept() { Ok(pair) => pair, Err(e) => { eprintln!("accept error: {}", e); return; } }; println!("peer {}", peer); let _ = stream; }

Успешный прием возвращает пару: поток для обмена и адрес удаленной стороны. Пока программа ждет на приеме, она не идет дальше, пока кто-то не постучится или не случится ошибка.

Если порт уже занят другой программой, привязка вернет ошибку. Разберем ее отдельно от сбоя при ожидании гостя:

use std::net::TcpListener; fn main() { match TcpListener::bind("127.0.0.1:7000") { Ok(_listener) => println!("ready"), Err(e) => eprintln!("bind error: {}", e), } }

Дан адрес:

let addr = "127.0.0.1:7000";

Займите этот адрес слушателем, дождитесь одного входящего потока и выведите адрес гостя на экран.

Дан адрес:

let addr = "127.0.0.1:7000";

Привяжите слушатель и при успехе напечатайте listen, не дожидаясь гостя.

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

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