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")
请登录后再评论