【go语言 socket编程系列】TCPAddr类型与ResolveTCPAddr方法

【TCPAddr】

TCPAddr 是一个包含 IP和port的 struct。其定义在tcpsock.go 文件中。

// TCPAddr represents the address of a TCP end point.
type TCPAddr struct {
        IP   IP  
        Port int 
        Zone string // IPv6 scoped addressing zone
}

【常用方法】 

常用的方法有func ResolveTCPAddr(net, addr string) (*TCPAddr, error) ,通过输入net 和addr 来创建一个TCPAddr。

net 为 tcp  tcp4  tcp6 的一种,如果是 "" 则默认为tcp。

addr 是 类似”g.cn:80“或者”127.0.0.1:80“的字符串。 

其源码如下:

func ResolveTCPAddr(net, addr string) (*TCPAddr, error) {
        switch net {
        case "tcp", "tcp4", "tcp6":
        case "": // a hint wildcard for Go 1.0 undocumented behavior
                net = "tcp"
        default:
                return nil, UnknownNetworkError(net)
        }
        a, err := resolveInternetAddr(net, addr, noDeadline)
        if err != nil {
                return nil, err
        }
        return a.toAddr().(*TCPAddr), nil
}

【代码实现】

package main

import (
	"fmt"
	"net"
	"os"
	"unsafe"
)

func checkError(err error) {
	if err != nil {
		fmt.Println("Error !", err.Error())
		os.Exit(1)
	}
}

func typeof(v interface{}) {
	fmt.Printf("type is:%T\n", v)
}
func sizeof(v interface{}) {
	fmt.Println("sizeof is: ", unsafe.Sizeof(v))
}

func main() {
	addr := "www.baidu.com:80"
	tcpaddr, err := net.ResolveTCPAddr("", addr)
	checkError(err)

	fmt.Println("tcpaddr is:", tcpaddr)
	fmt.Println("IP is:", tcpaddr.IP.String(), "Port is", tcpaddr.Port)
	typeof(addr)
	typeof(tcpaddr)
	sizeof(addr)
	sizeof(tcpaddr)
	fmt.Println("addr len is:", len(addr))
	fmt.Println("tcpaddr len is:", len(tcpaddr.String()))

}

执行结果

$./l_ResolvTCPAddr 
tcpaddr is: 61.135.169.125:80
IP is: 61.135.169.125 Port is 80
type is:string
type is:*net.TCPAddr
sizeof is:  16
sizeof is:  16
addr len is: 16
tcpaddr len is: 17
$
 

猜你喜欢

转载自blog.csdn.net/natpan/article/details/82849743
今日推荐