Go语言使用net包实现TCP通信,服务端通过net.Listen监听端口并用goroutine处理并发连接,客户端通过net.Dial建立连接发送数据。示例展示基础回显功能,关键点包括:利用goroutine实现高并发、defer关闭连接防泄漏、处理读写错误、解决TCP粘包及设置IO超时。掌握这些可构建稳定网络应用。

Go语言凭借其简洁的语法和强大的标准库,在网络编程领域表现出色。特别是在处理TCP连接时,Golang提供了net包来简化开发流程,让开发者可以快速构建高性能的网络服务。下面介绍如何使用Golang实现基础的TCP服务端与客户端通信。
在Golang中创建一个TCP服务端非常直观。通过net.Listen函数监听指定地址和端口,然后调用Accept方法接收来自客户端的连接请求。
以下是一个简单的TCP服务端示例:
func main() {
// 监听本地9000端口
listener, err := net.Listen("tcp", ":9000")
if err != nil {
log.Fatal("监听失败:", err)
}
defer listener.Close()
log.Println("服务端启动,监听 :9000")
for {
// 接受客户端连接
conn, err := listener.Accept()
if err != nil {
log.Println("接受连接出错:", err)
continue
}
// 使用goroutine处理每个连接
go handleConnection(conn)
}
}
// 处理客户端请求
func handleConnection(conn net.Conn) {
defer conn.Close()
buffer := make([]byte, 1024)
for {
n, err := conn.Read(buffer)
if err != nil {
log.Println("读取数据失败:", err)
return
}
// 打印接收到的数据
log.Printf("收到: %s", string(buffer[:n]))
// 回显数据给客户端
_, _ = conn.Write([]byte("echo: " + string(buffer[:n])))
}
}
这个服务端会持续监听新连接,并为每个连接启动一个独立的goroutine进行处理,从而实现并发通信。
立即学习“go语言免费学习笔记(深入)”;
客户端通过net.Dial函数连接到指定的服务端地址,之后即可发送和接收数据。
func main() {
// 连接到服务端
conn, err := net.Dial("tcp", "localhost:9000")
if err != nil {
log.Fatal("连接失败:", err)
}
defer conn.Close()
// 发送消息
message := "Hello, Server!"
_, _ = conn.Write([]byte(message))
// 读取响应
buffer := make([]byte, 1024)
n, _ := conn.Read(buffer)
log.Printf("收到回复: %s", string(buffer[:n]))
}
该客户端向服务端发送一条消息并等待回显响应,完成后断开连接。
基本上就这些。掌握net包的基本用法后,你可以在此基础上构建更复杂的网络应用,比如HTTP服务器、RPC框架或即时通讯系统。Golang的网络编程并不复杂,但细节决定稳定性。
以上就是Golang网络编程基础与TCP连接实现的详细内容,更多请关注php中文网其它相关文章!
编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号