【问题标题】:Rust issue with declaring TcpStream in a struct在结构中声明 TcpStream 的 Rust 问题
【发布时间】: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 调用看起来像是要走的路,只是您需要正确处理结果,因为尝试连接可能会失败。

标签: sockets struct rust option


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-06-05
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2022-11-21
    • 2019-12-11
    • 2021-08-27
    相关资源
    最近更新 更多