golang localaddr

admin 2024-09-25 14:48:14 编程 来源:ZONE.CI 全球网 0 阅读模式

Golang中的localaddr是一个函数,用于获取一个TCP或UDP连接的本地地址。该函数返回一个net.Addr接口类型的值,代表了本地地址。

1. 获取TCP连接的本地地址

使用Golang的net包的Dial函数连接到远程TCP服务器时,可以通过对返回的net.Conn类型值调用LocalAddr方法来获取本地地址。例如:

conn, err := net.Dial("tcp", "example.com:80")
if err != nil {
    fmt.Println(err)
    return
}
localAddr := conn.LocalAddr()
fmt.Println(localAddr)

这样就可以获取到本地TCP连接的IP地址和端口号。如果是通过net.DialTimeout函数建立连接,则需要注意可能会返回一个超时错误,此时可以根据需要进行重试。

2. 获取UDP连接的本地地址

获取UDP连接的本地地址与获取TCP连接的本地地址类似。同样是通过对net.Conn类型值调用LocalAddr方法来完成。以下是一个示例:

serverAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8888")
if err != nil {
    fmt.Println(err)
    return
}
conn, err := net.DialUDP("udp", nil, serverAddr)
if err != nil {
    fmt.Println(err)
    return
}
localAddr := conn.LocalAddr()
fmt.Println(localAddr)

这样就可以获取到本地UDP连接的IP地址和端口号。需要注意的是,UDP连接是无连接的,所以在使用DialUDP函数建立连接时,对端地址需要提前通过net.ResolveUDPAddr函数进行解析。

3. 更多用途

除了用于获取连接的本地地址外,localaddr函数还可以用于其他一些场景:

1)获取本地IP地址

addrs, err := net.InterfaceAddrs()
if err != nil {
    fmt.Println(err)
    return
}
for _, addr := range addrs {
    if ipNet, ok := addr.(*net.IPNet); ok && !ipNet.IP.IsLoopback() {
        if ipNet.IP.To4() != nil {
            fmt.Println(ipNet.IP.String())
        }
    }
}

通过遍历所有网络接口的地址,可以获取到本地所有的IP地址。

2)获取本地主机名

hostname, err := os.Hostname()
if err != nil {
    fmt.Println(err)
    return
}
fmt.Println(hostname)

通过调用os包的Hostname函数,可以获取到本地主机的名称。

3)获取本地所有端口号

ports := make([]int, 0)
for port := 1024; port <= 65535; port++ {
    ln, err := net.Listen("tcp", fmt.Sprintf(":%d", port))
    if err == nil {
        ln.Close()
        ports = append(ports, port)
    }
}
fmt.Println(ports)

通过尝试在本地所有端口上进行Listen操作,可以获取到当前可用的所有端口号。

通过以上几个示例,可以看出,在Golang中,localaddr函数不仅可以用于获取TCP和UDP连接的本地地址,还可以用于获取本地IP地址、主机名以及所有端口号。这些功能在网络编程和服务器开发中非常有用。

TypeScript学习笔记 编程

TypeScript学习笔记

TypeScript学习笔记[TOC]TypeScript概述TypeScript是微软开发的一个开源的编程语言,通过在JavaScript的基础上添加静态类型
高德地图JSAPI学习笔记 编程

高德地图JSAPI学习笔记

[toc]概述地图 JS API 2.0 是高德开放平台免费提供的第四代 Web 地图渲染引擎, 以 WebGL 为主要绘图手段,本着“更轻、更快、更易用”的服
golangTCPpush 编程

golangTCPpush

在当今互联网时代,即时通讯成为了人们生活中不可或缺的一部分。而实现即时通讯的关键技术之一就是TCP Push。作为一名专业的golang开发者,我们不仅需要掌握
nodegolang性能对比 编程

nodegolang性能对比

在当前的编程世界中,Node.js和Golang是两种备受瞩目的技术。它们都拥有出色的性能和能力,但在某些方面却存在差异。本文将对Node.js和Golang进
评论:0   参与:  48