在结构中声明 TcpStream 的 Rust 问题

Posted

技术标签:

【中文标题】在结构中声明 TcpStream 的 Rust 问题【英文标题】:Rust issue with declaring TcpStream in a struct 【发布时间】:2022-01-16 01:21:21 【问题描述】:

我是 rust 新手,并且已经完成了 try it 示例。我想尝试编写一个套接字库。我早期遇到的一个问题是如何初始化具有 TcpStream 的结构

struct connection
    address: String,
    sock:    TcpStream,

当我开始时,我不知道如何初始化那种类型的对象

impl connection
   fn new(add: &str)->connection
       connection
             address: add.to_string(),
             //i didnt know what to put here
             // sock: TcpStream::connect(add.to_string()); ??this seems wrong.
       
   

我在这里找到了一个唯一的问题,上面写着 make TcpStream and Option

struct connection
   address: String,
   sock: Option<TcpStream>,

这使得代码非常尴尬,因为我永远不能只做 sock::connect 等,因为 sock 总是在 Some() 中

我错过了什么吗?有没有办法做到这一点,我可以只声明它并能够像所有其他变量一样从结构中使用它,而不需要这个 Option 东西?

如果将它放在一个选项中是唯一的方法,有没有一种简单的方法可以将它从选项中取出,我用来引用它的结构变量总是一个选项,所以我不知道如何我可以正常访问它而无需转义 Some()

【问题讨论】:

不确定你遵循的建议是使用Option,如果你出于某种原因稍后要初始化流,你会这样做,这听起来不像你想要的.使用TcpStream::connect 调用看起来像是要走的路,只是您需要正确处理结果,因为尝试连接可能会失败。 【参考方案1】:

如果您想将结构初始化和 TCP 设置分开,您还可以使用socket2 library 创建一个未连接的Socket,将其转换为TcpStream,然后通过借用它作为Socket 来连接它

【讨论】:

以上是关于在结构中声明 TcpStream 的 Rust 问题的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 TcpStream 上的并行读写?

MIO EventLoop 没有为 TcpStream 运行

如何在Rust中的结构中声明“静态”字段?

rust 编写hello world redis

rust 编写hello world redis

rust 编写hello world redis