这里主要介绍网络包内主要的几个类型。
net包是提供了底层的网络接口的,但是平时我们需要就是两个主要的接口,Listener和Conn。
1. Conn
Conn是一个基本的接口类型,以数据流为向导的网络连接接口。注意他是接口类型,不需要我们来手动构造实现Conn接口。
生成满足Conn接口的类型的函数
func Dial(network, address string) (Conn, error)
func DialTimeout(network, address string, timeout time.Duration) (Conn, error)
func FileConn(f *os.File) (c Conn, err error)
func Pipe() (Conn, Conn)
通常在网络内,我们使用Dial()这个函数,来建立连接。
他的两个参数,第一个是网络连接类型。
有这么些种类:"tcp"
, "tcp4" (IPv4-only)
, "tcp6" (IPv6-only)
, "udp"
, "udp4" (IPv4-only)
, "udp6" (IPv6-only)
, "ip"
, "ip4" (IPv4-only)
, "ip6" (IPv6-only)
, "unix"
, "unixgram"
and "unixpacket"
.
在Go中,主要处理了IP网络、TCP网络、UDP网络和UNIX网络。Go中Conn主要是处理在网络层之上的。所以在使用IP网络的时候,后面必须添加IP层上使用的协议名称或协议号。比如
Dial("ip4:1", "127.0.0.1")
Dial("ip6:ospf", "::1")
但是这样做之后,必须自己实现里面的IP数据包的内容,比如你协议使用TCP,那么TCP的字段都需要你手动来构造。通常我们直接使用TCP或UDP网络就可以了。
第二个参数是网络地址,在IP网络内,只用给出网络ip地址就可以了,在tcp或udp网络内,需要给出网络端口,但是如果你给出上层网络协议也是可以的,如
Dial("tcp", "12.34.56.78:80")
Dial("tcp", "google.com:http")
Dial("tcp", "[2001:db8::1]:http") //注意ipv6,必须使用[]进行包裹
Dial("tcp", <