计算机语言dial,Go语言DialTCP():网络通信

实际上,在前面《Dial()函数》一节中介绍的 Dial() 函数其实是对 DialTCP()、DialUDP()、DialIP() 和 DialUnix() 的封装。我们也可以直接调用这些函数,它们的功能是一致的。这些函数的原型如下:

func DialTCP(net string,laddr,raddr *TCPAddr) (c *TCPConn,err error)

func DialUDP(net string,raddr *UDPAddr) (c *UDPConn,err error)

func DialIP(netProto string,raddr *IPAddr) (*IPConn,error)

func DialUnix(net string,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)

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值