44、Go语言基础 - 网络编程 - socket 编程简学
hi,我是温新
本篇文章将简单简单简单学习一下 socket 网络编程的简单知识。
只要涉及网络编程开发,就离不开 socket,因为大部分底层网络的编程都离不开 socket。无论是 HTTP 编程、Web 开发、IM 通信、视频流传输,它们的底层都是 socket 编程。如日常生活中的发送微信消息、看直播等,都是 socket。
什么是 Socket
socket 起源于 UNIX,UNIX 中一切都是文件,都可以用打开(open)->读写(write/read)->关闭(close)默认来操作,而 socket 就是该模式的一个实现。
网络的 socket 数据传输是一种特殊的 I/O,socket 是一种文件描述符。同样有 open 这样的操作,它返回的是 socket 描述符。
Socket 怎么通信
网络中的进程之间如何通过 socket 通信?通信的三大要素有:IP 地址、协议、端口。而 tcp/ip 已具备,因此,可以使用 tcp/ip 协议进行通信。
现在,使用 tcp/ip 协议的应用程序几乎都是采用 socket 进行通信。因此,也可以说是 一切都是 socket。
Dial 函数
编写网络程序时,将看不到传统的编码形式。Go 语言中 Socket 编程的 API 都在 net 包中。
Go 提供了 Dial 函数来连接服务器,使用 Listen 监听,Accept 接收连接。
Go 语言标准库对传统的 socket 编程过程进行了抽象和封装。无论期望使用什么协议建立什么形式的连接,都只需要调用net.Dial()即可。
Dial() 函数原型如下:
func Dial(net, addr string) (Conn, error)
参数含义:
net:网络协议的名字;
addr:IP 地址或域名
常见协议的调用方式
TCP
conn, err := net.Dial("tcp", "127.0.0.1:20000")
UDP
conn, err := net.Dial("udp", "127.0.0.1:20000")
ICMP 使用协议名称
conn, err := net.Dial("ip4:icmp", "www.ziruchu.com")
ICMP 使用协议编号
conn, err := net.Dial("ip4:1", "127.0.0.1")
请登录后再评论