44、Go语言基础 - 网络编程 - socket 编程简学

作者: 温新

分类: 【Go基础】

阅读: 282

时间: 2023-12-05 00:37:37

hi,我是温新

本篇文章将简单简单简单学习一下 socket 网络编程的简单知识。

只要涉及网络编程开发,就离不开 socket,因为大部分底层网络的编程都离不开 socket。无论是 HTTP 编程、Web 开发、IM 通信、视频流传输,它们的底层都是 socket 编程。如日常生活中的发送微信消息、看直播等,都是 socket。

什么是 Socket

socket 起源于 UNIXUNIX 中一切都是文件,都可以用打开(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")
请登录后再评论