包括 TCP/IP, UDP, domain name solution, Unix domain socket.
net package 支援的網路類型 network
基本四類 ip, tcp, udp, unix ,請見文件Dial 一節"tcp",
"tcp4" (IPv4-only),
"tcp6" (IPv6-only)
"udp",
"udp4" (IPv4-only),
"udp6" (IPv6-only),
"ip", "ip4" (IPv4-only)
"ip6" (IPv6-only)
"unix"
"unixgram"
"unixpacket".
network又可分為兩類
無連接 ip, udp, unix(DGRAM),
建立連接 tcp, unix(STREAM),需要監聽,有listener。
無連接基礎interface是Conn
有連接基礎interface是PacketConn
network interface 三個主要組成
1. sever 負責listen,取得conn2. client 負責連上server (dial),建立conn
3. conn stream導向的連線(Conn is a generic stream-oriented network connection.)
整個核心就是對conn的操作
基本模型
1. listen(server side)取得listener, accept之後取得conn
2. dial(client side)取得conn
3. conn的操作
Dial / Listen func
func Dial(network, address string) (Conn, error)
func Listen(net, laddr string) (Listener, error)
Example:
Dial("tcp", "golang.org:http") Dial("tcp", "192.0.2.1:http") Dial("tcp", "198.51.100.1:80") Dial("udp", "[2001:db8::1]:domain") Dial("udp", "[fe80::1%lo0]:53") Dial("tcp", ":80")
//client conn, err := net.Dial("tcp", "golang.org:80") if err != nil { // handle error } fmt.Fprintf(conn, "GET / HTTP/1.0\r\n\r\n") status, err := bufio.NewReader(conn).ReadString('\n') //server ln, err := net.Listen("tcp", ":8080") if err != nil { // handle error } for { conn, err := ln.Accept() if err != nil { // handle error } go handleConnection(conn) }
Conn是各種conn的基礎interface,
Dial()會判斷網路類型,回傳對應的conn。
例如是TCP網路,回傳TCPConn。
可以用dial()取得conn或是用各自的dial取得各自的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)
取得Listener
func FileListener(f *os.File)(ln Listener, err error)
func Listen(network, address string)(Listener, error)
type Conn interface { Read(b []byte) (n int, err error) Write(b []byte) (n int, err error) Close() error LocalAddr() Addr RemoteAddr() Addr SetDeadline(t time.Time) error SetReadDeadline(t time.Time) error SetWriteDeadline(t time.Time) error } type PacketConn interface { ReadFrom(b []byte) (n int, addr Addr, err error) Close() error LocalAddr() Addr SetDeadline(t time.Time) error SetReadDeadline(t time.Time) error SetWriteDeadline(t time.Time) error }
各種CONN
Conn
a interface, generic stream-oriented network connection.
Read()
Write()
PacketConn
a interface, generic packet-oriented network connection.
網路層的conn
ReadFrom()
WriteTo()
Conn跟PacketConn是兩種基礎interface,實際應用的四種Conn分別實作他們。
IPConn
實作Conn及PacketConn的IP network connections.
func DialIP(netProto string, laddr, raddr *IPAddr) (*IPConn, error)
func ListenIP(netProto string, laddr *IPAddr) (*IPConn, error)
TCPConn
實作Conn的TCP network connections.
func DialTCP(net string, laddr, raddr *TCPAddr) (*TCPConn, error)
func ListenTCP(net string, laddr *TCPAddr) (*TCPListener, error)
UDPConn
實作Conn及PacketConn的UDP network connections.
func DialUDP(net string, laddr, raddr *UDPAddr) (*UDPConn, error)
func ListenUDP(net string, laddr *UDPAddr) (*UDPConn, error)
UnixConn
實作Conn及PacketConn的Unix socket connections.
SOCK_DGRAM
func DialUnix(net string, laddr, raddr *UnixAddr) (*UnixConn, error)
func ListenUnixgram(net string, laddr *UnixAddr) (*UnixConn, error)
SOCK_STREAM
func DialUnix(net string, laddr, raddr *UnixAddr) (*UnixConn, error)
func ListenUnix(net string, laddr *UnixAddr) (*UnixListener, error)
通用func
func ListenPacket(net, laddr string) (PacketConn, error)
監聽ip, udp, unix(DGRAM)等協議,返回packetConn。
packetConn可能是IPConn, UDPConn, UnixConn。
func Listen(net, laddr string) (Listener, error)
監聽tcp, unix(stream)等協議。返回Listener。
Listener有可能是TCPListener, UnixListener。
func Dial(network, address string) (Conn, error)
返回Conn。
依據network有可能是IPConn, UDPConn, TCPConn, UnixConn。
各network(IP/TCP/UDP/Unix)相關的物件
Conn
Addr
Listener
Example:
IPConn
IPAddr
TCPAddr
TCPConn
TCPListener
UDPAddr
UDPConn
UnixAddr
UnixConn
UnixListener
其他相關物件
Addr
Buffers
IP
IPNet
IPMask
MX
NS
Resolver 支援功能
支援功能
func LookupAddr(addr string) (names []string, err error)
func LookupCNAME(host string) (cname string, err error)
func LookupHost(host string) (addrs []string, err error)
func LookupIP(host string) ([]IP, error)
func LookupMX(name string) ([]*MX, error)
func LookupNS(name string) ([]*NS, error)
func LookupPort(network, service string) (port int, err error)
func LookupSRV(service, proto, name string) (cname string, addrs []*SRV, err error)
func LookupTXT(name string) ([]string, error)
沒有留言:
張貼留言