Go 常用标准库之net

2023-07-11 13:11:46 阅读:1169 评论:0 点赞:0
所属分类: Go 语言学习笔记

net 包提供了可移植的网络I/O接口,包括TCP/IP、UDP、域名解析和Unix域socket。

虽然本包提供了对网络原语的访问,大部分使用者只需要 DialListenAccept 函数提供的基本接口;以及相关的 ConnListener 接口。crypto/tls 包提供了相同的接口和类似的 DialListen 函数。

类型

type Dialer

type Dialer struct {
    // Timeout是dial操作等待连接建立的最大时长,默认值代表没有超时。
    // 如果Deadline字段也被设置了,dial操作也可能更早失败。
    // 不管有没有设置超时,操作系统都可能强制执行它的超时设置。
    // 例如,TCP(系统)超时一般在3分钟左右。
    Timeout time.Duration
    // Deadline是一个具体的时间点期限,超过该期限后,dial操作就会失败。
    // 如果Timeout字段也被设置了,dial操作也可能更早失败。
    // 零值表示没有期限,即遵守操作系统的超时设置。
    Deadline time.Time
    // LocalAddr是dial一个地址时使用的本地地址。
    // 该地址必须是与dial的网络相容的类型。
    // 如果为nil,将会自动选择一个本地地址。
    LocalAddr Addr
    // DualStack允许单次dial操作在网络类型为"tcp",
    // 且目的地是一个主机名的DNS记录具有多个地址时,
    // 尝试建立多个IPv4和IPv6连接,并返回第一个建立的连接。
    DualStack bool
    // KeepAlive指定一个活动的网络连接的生命周期;如果为0,会禁止keep-alive。
    // 不支持keep-alive的网络连接会忽略本字段。
    KeepAlive time.Duration
}

提示

Dialer 类型包含与某个地址建立连接时的参数。每一个字段的零值都等价于没有该字段。因此调用 Dialer 零值的 Dial 方法等价于调用 Dial 函数。

接口

type Listener

type Listener interface {
    // Addr返回该接口的网络地址
    Addr() Addr
    // Accept等待并返回下一个连接到该接口的连接
    Accept() (c Conn, err error)
    // Close关闭该接口,并使任何阻塞的Accept操作都会不再阻塞并返回错误。
    Close() error
}

Listener 是一个用于面向流的网络协议的公用的网络监听器接口。多个线程可能会同时调用一个 Listener 的方法。
示例

// Listen on TCP port 2000 on all interfaces.
l, err := net.Listen("tcp", ":2000")
if err != nil {
    log.Fatal(err)
}
defer l.Close()
for {
    // Wait for a connection.
    conn, err := l.Accept()
    if err != nil {
        log.Fatal(err)
    }
    // Handle the connection in a new goroutine.
    // The loop then returns to accepting, so that
    // multiple connections may be served concurrently.
    go func(c net.Conn) {
        // Echo all incoming data.
        io.Copy(c, c)
        // Shut down the connection.
        c.Close()
    }(conn)
}

函数

func Dial

func Dial(network, address string) (Conn, error)

在网络 network 上连接地址 address,并返回一个 Conn 接口。可用的网络类型有:
tcptcp4tcp6udpudp4udp6ipip4ip6unixunixgramunixpacket
对TCP和UDP网络,地址格式是 host:port[host]:port,参见函数 JoinHostPortSplitHostPort

func DialTimeout

func DialTimeout(network, address string, timeout time.Duration) (Conn, error)

DialTimeout 类似 Dial 但采用了超时。timeout 参数如果必要可包含名称解析。

func Pipe

func Pipe() (Conn, Conn)

Pipe 创建一个内存中的同步、全双工网络连接。连接的两端都实现了 Conn 接口。一端的读取对应另一端的写入,直接将数据在两端之间作拷贝,没有内部缓冲。

func Listen

func Listen(net, laddr string) (Listener, error)

返回在一个本地网络地址 laddr 上监听的 Listener。网络类型参数net必须是面向流的网络:tcptcp4tcp6unixunixpacket

标签: go net

永不言弃

职业:后端开发工程师
学校:重庆师范大学
城市:重庆
文章:169
好吧,不知道说点什么...

登录逐梦笔记

注册逐梦笔记

已有账号?