返回
Go语言Net库之TCP服务器端与客户端开发
后端
2023-12-25 15:08:27
简介
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP旨在为应用程序提供一种可靠且高效的数据传输方式。
Go语言中的Net库
Go语言中的net库提供了TCP协议的实现,可以通过该库轻松地开发TCP服务器和客户端程序。net库中主要包含以下几个重要的类型:
Listener
:用于监听TCP连接的接口。Conn
:表示TCP连接的接口。TCPAddr
:表示TCP地址的结构体。
开启TCP监听
要开启TCP监听,需要使用net库中的Listen
函数。该函数接收一个网络地址和一个协议类型作为参数,并返回一个Listener
对象。Listener
对象可以用来接受来自客户端的连接请求。
package main
import (
"fmt"
"net"
)
func main() {
// 监听TCP端口号为8080的连接请求
listener, err := net.Listen("tcp", ":8080")
if err != nil {
fmt.Println("Error listening:", err)
return
}
// 接受客户端连接请求,并返回一个`Conn`对象
conn, err := listener.Accept()
if err != nil {
fmt.Println("Error accepting:", err)
return
}
// 使用`Conn`对象进行数据收发
fmt.Println("Connected to client:", conn.RemoteAddr())
conn.Write([]byte("Hello, client!"))
buffer := make([]byte, 1024)
n, err := conn.Read(buffer)
if err != nil {
fmt.Println("Error reading:", err)
return
}
fmt.Println("Received from client:", string(buffer[:n]))
// 关闭连接
conn.Close()
}
接收客户端数据
当客户端连接到TCP服务器后,服务器可以使用Conn
对象的Read
方法来接收客户端发送的数据。Read
方法会将数据读入一个字节数组中,并返回读取的字节数。
// 从客户端读取数据
n, err := conn.Read(buffer)
if err != nil {
fmt.Println("Error reading:", err)
return
}
向客户端发送消息
服务器可以使用Conn
对象的Write
方法向客户端发送数据。Write
方法会将数据写入到客户端的连接中,并返回写入的字节数。
// 向客户端发送数据
conn.Write([]byte("Hello, client!"))
客户端开发
客户端开发与服务器端开发类似,但需要使用Dial
函数来连接到TCP服务器。
// 连接到TCP服务器
conn, err := net.Dial("tcp", "localhost:8080")
if err != nil {
fmt.Println("Error dialing:", err)
return
}
// 使用`Conn`对象进行数据收发
fmt.Println("Connected to server:", conn.RemoteAddr())
conn.Write([]byte("Hello, server!"))
buffer := make([]byte, 1024)
n, err := conn.Read(buffer)
if err != nil {
fmt.Println("Error reading:", err)
return
}
fmt.Println("Received from server:", string(buffer[:n]))
// 关闭连接
conn.Close()
总结
本文介绍了Go语言中net库的使用,包括如何开启TCP监听、接收客户端数据以及向客户端发送消息。还提供了客户端开发的示例代码,帮助您轻松理解和使用TCP协议。