Skip to main content

TcpServerManager

Struct TcpServerManager 

Source
pub struct TcpServerManager { /* private fields */ }
Expand description

TCP 服务端管理器(同步)

封装 std::net::TcpListener,提供 TCP 服务端的绑定、监听、接受连接等操作。 每次调用 accept() 会阻塞等待并返回一个新的 TcpTransport 实例, 用于与单个客户端通信。

§Lifecycle

  1. 调用 bind() 绑定端口并创建实例
  2. 循环调用 accept() 接受客户端连接
  3. 对每个返回的 TcpTransport 进行数据通信
  4. 调用 shutdown() 停止监听并释放资源

§Thread Safety

TcpServerManager 本身不是 Sync 的,如需多线程 accept, 建议使用 Arc<TcpListener> 或切换到异步版本 AsyncTcpServerManager

§Example

use connect_io::TcpServerManager;
use std::net::SocketAddr;

let addr: SocketAddr = "0.0.0.0:8080".parse().unwrap();
let server = TcpServerManager::bind(addr)?;

loop {
    match server.accept() {
        Ok(mut client) => {
            println!("新客户端连接: {:?}", client.peer_addr());
            // 处理客户端通信...
        }
        Err(e) => eprintln!("接受连接失败: {}", e),
    }
}

server.shutdown()?;

Implementations§

Source§

impl TcpServerManager

Source

pub fn bind(addr: SocketAddr) -> Result<Self, TransportError>

绑定指定地址并启动 TCP 监听

创建底层 TcpListener 并绑定到指定地址。 绑定成功后即可开始接受连接。

§Arguments
  • addr - 要绑定的本地 Socket 地址(IP:Port)
§Returns
  • Ok(TcpServerManager) - 监听器实例,可开始 accept
  • Err(Io(AddrInUse)) - 端口已被占用
  • Err(Io(PermissionDenied)) - 权限不足(绑定 < 1024 端口需要 root)
§Example
let addr: SocketAddr = "0.0.0.0:8080".parse().unwrap();
let server = TcpServerManager::bind(addr)?;
Source

pub fn accept(&self) -> Result<TcpTransport, TransportError>

接受新的客户端连接(阻塞)

阻塞等待直到有新的客户端连接到达。 返回的 TcpTransport 实例已设置默认的读/写超时(5秒), 可直接用于与该客户端通信。

§Returns
  • Ok(TcpTransport) - 新连接的传输实例,已配置好超时
  • Err(Io(...)) - 接受连接失败或设置超时失败
§Blocking

此方法会阻塞当前线程直到有新连接到达。 如需非阻塞或多客户端处理,请使用异步版本 AsyncTcpServerManager

Source

pub fn local_addr(&self) -> Option<SocketAddr>

获取监听器本地绑定的地址

返回 TCP 监听器绑定的本地 socket 地址。 如果绑定时端口指定为 0,此处可获取操作系统实际分配的端口号。

§Returns
  • Some(SocketAddr) - 本地绑定地址(如 “0.0.0.0:8080”)
  • None - 获取失败
Source

pub fn shutdown(self) -> Result<(), TransportError>

停止监听并释放资源

消费 self(取得所有权),显式释放底层 TcpListener 资源。 底层 socket 在 drop 时自动关闭,此后不再接受新连接。

§Returns

始终返回 Ok(()),因为 drop 操作不会产生错误

§Note

调用后此 TcpServerManager 实例被消费,无法再次使用。 已接受的客户端连接不受影响,它们有自己的独立生命周期。

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.