Golang 网络编程笔记

网络编程

标准库里提供的net包,支持基于IP层、TCP/UDP层及更高层面(如HTTP、FTP、SMTP)的网络操作,其中用于IP层的成为RawSocket

Socket编程

  1. 建立Socket: socket()
  2. 绑定Socket: bind()
  3. 监听: listen() 或者 connect()
  4. 接受连接: accept()
  5. 接收: receive() 或者 sent()
    标准库对此过程进行了抽象和封装。无论使用什么协议建立什么形式的连
    接,都只需要调用net.Dial()即可

Dial()函数

原型func Dial(net, addr string) (Con, error)

  • net参数 网络协议的名字
  • addr参数 IP地址或域名

  • TCP链接: conn, err := net.Dial("tcp", "192.168.0.10:2100")

  • UDP链接: conn, err := net.Dial("udp", "192.168.0.12:975")
  • ICMP链接(使用协议名称): conn, err := net.Dial("ip4:icmp", "www.baidu.com")
  • ICMP链接(使用协议编号): conn, err := net.Dial("ip4:1", "10.0.0.3")

支持如下几种网络协议:”tcp”、”tcp4”(仅限IPv4)、”tcp6”(仅限 IPv6)、”udp”、”udp4”(仅限IPv4)、”udp6”(仅限IPv6)、”ip”、”ip4”(仅限IPv4)和”ip6”(仅限IPv6)
在成功建立连接后,可以进行数据的发送和接收。发送数据时,使用conn的Write()成员方法,接收数据时使用Read()方法。

实际上,Dial()函数是对DialTCP()DialUDP()DialIP()DialUnix()的封装。可以直接调用这些函数,它们的功能是一致的。这些函数的原型如下:

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)