func DialTCP(net string, laddr, raddr *TCPAddr) (c *TCPConn, err error)
func DialUDP(net string, laddr, raddr *UDPAddr) (c *UDPConn, err error)
func DialIP(netProto string, laddr, raddr *IPAddr) (*IPConn, error)
func DialUnix(net string, laddr, raddr *UnixAddr) (c *UnixConn, err error)
之前基于 TCP 发送的 HTTP 请求,读取服务器信息并返回 HTTP Head 的示例程序也可以使用下面的方式实现:
package main import ( "net" "os" "fmt" "io/ioutil" ) func main() { if len(os.Args) != 2 { fmt.Fprintf(os.Stderr, "Usage: %s host:port", os.Args[0]) os.Exit(1) } service := os.Args[1] tcpAddr, err := net.ResolveTCPAddr("tcp4", service) checkError(err) conn, err := net.DialTCP("tcp", nil, tcpAddr) checkError(err) _, err = conn.Write([]byte("HEAD / HTTP/1.0/r/n/r/n")) checkError(err) result, err := ioutil.ReadAll(conn) checkError(err) fmt.Println(string(result)) os.Exit(0) } func checkError(err error) { if err != nil { fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error()) os.Exit(1) } }
与之前使用 Dail() 的例子相比,有两个不同点:
- net.ResolveTCPAddr() 用于解析地址和端口号;
- net.DialTCP() 用于建立链接。
提示:这两个函数在 Dial() 函数中都得到了封装。
运行结果如下:
go run main.go baidu.com:80
HTTP/1.1 200 OK
Date: Fri, 03 Jan 2020 01:17:50 GMT
Server: Apache
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: "51-47cf7e6ee8400"
Accept-Ranges: bytes
Content-Length: 81
Cache-Control: max-age=86400
Expires: Sat, 04 Jan 2020 01:17:50 GMT
Connection: Close
Content-Type: text/html
此外,net 包中还包含了一系列的工具函数,合理地使用这些函数可以更好地保障程序的质量。
验证 IP 地址有效性的函数如下:
func net.ParseIP()
创建子网掩码的函数如下:
func IPv4Mask(a, b, c, d byte) IPMask
获取默认子网掩码的函数如下:
func (ip IP) DefaultMask() IPMask
根据域名查找 IP 的函数如下:
func ResolveIPAddr(net, addr string) (*IPAddr, error)
func LookupHost(name string) (cname string, addrs []string, err error)
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/21363.html