TCP
从本节开始,我将向大家讲解有关 Go 网络的知识,主要分为传输层协议 TCP 和 UDP,应用层协议 HTTP 和 WebSocket,而本节将着重介绍 TCP。
TCP 名叫传输控制协议(英语:Transmission Control Protocol,缩写:TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP 是位于 IP 层和应用层之间的传输层,它是目前互联网通信的重要基石,是主要应用层协议 HTTP、WebSocket 等的底层支持。
参见 TCP/IP 4 层的分层图:

Go 语言中关于网络的操作都封装在 net 包中,这个包非常强大,包含了 IP、TCP、UDP 等一系列操作,下面我就带着大家一起来学习 Net 包中的 TCP 的相关用法。
基本知识
因为 TCP 是面向连接的传输层协议,所以使用的时候主要分为如下几步:
使用
Listen创建一个 TCP Server,并通过l.Accept获取客户端的连接请求。在 Client 端使用
Dial函数向指定的 TCP 地址(IP:Port) 发起连接请求 (该 Server 可以是自己搭建)。创建成功后,会生成用于通信的连接
*net.TCPConn。该
TCPConn是双向的,Client 和 Server 之间可以批次通信。可以通过
SetReadDeadline和SetWriteDeadline设置读写超时时间。
核心 API 如下:
创建 TCP Server:
Listen其实是 net 包的一个辅助方法,它等价于以下操作:
等待连接:
当客户端调用 Dail 方法的时候, Server 端可以通过此方法获得和客户端一样的连接,它们分别是一个 Socket 的两端。
客户端发起连接请求并创建连接:
Dial其实是 net 包的一个辅助方法,它不仅支持tcp的连接创建,还支持udp,ip,unix,它等价于以下操作:
通过连接发送数据:
通过连接读取数据:
设置读超时时间:
设置写超时时间:
注意:
SetReadDeadline、SetWriteDeadline方法的参数为具体的时刻,而不是时间间隔(time.Duration)。
关闭连接:
注意: 连接用完之后,需要通过此方法来进行资源释放,不然会出现句柄泄露的问题。
实战示例
下面我们就来看一个简单示例,这个例子主要演示使用 Go 的 net 库来创建一个 TCP Server, 并通过 Client 进行连接,最后再通过该连接来收发消息。
server/main.go
client/main.go
运行程序,结果如下:
参考资料:
最后更新于
这有帮助吗?