在golang中建立tcp连接可通过标准库net实现,服务端使用net.listen监听地址并接受连接,客户端使用net.dial发起连接。1. 服务端核心流程包括监听端口(如8080)、接受连接、并发处理数据(通过goroutine);2. 客户端主要步骤为调用net.dial连接服务器,并发送和接收数据;3. 注意事项包括设置连接超时(如使用net.dialtimeout)、处理读取阻塞、解决粘包问题(通过协议定界)、及时关闭连接以避免资源泄漏。掌握这些基础步骤即可完成基本的tcp通信,进阶功能如心跳机制等可逐步深入。
建立TCP连接在Golang中其实挺直接的,标准库net已经封装得很完善了。只需要理解几个关键函数和流程,就能快速写出一个简单的TCP客户端和服务端。
想写一个TCP服务端,核心就是监听地址、接受连接、处理数据。Go里用的是net.Listen来创建监听套接字。
下面是一个最基础的服务端代码:
立即学习“go语言免费学习笔记(深入)”;
package main import ( "fmt" "net" ) func handleConn(conn net.Conn) { defer conn.Close() buf := make([]byte, 1024) for { n, err := conn.Read(buf) if err != nil { fmt.Println("连接断开:", err) return } fmt.Printf("收到数据: %s\n", buf[:n]) } } func main() { listener, _ := net.Listen("tcp", ":8080") fmt.Println("服务端启动,监听8080端口") for { conn, err := listener.Accept() if err != nil { fmt.Println("接受连接失败:", err) continue } go handleConn(conn) } }
这个例子会一直监听8080端口,每次有新连接进来都会起一个goroutine去处理。这里用了并发模型,是因为每个连接可能需要长时间运行,单独处理不会阻塞主循环。
客户端相比服务端更简单一些,主要是调用net.Dial来主动连接服务端地址。
看个例子:
package main import ( "fmt" "net" ) func main() { conn, err := net.Dial("tcp", "localhost:8080") if err != nil { fmt.Println("连接失败:", err) return } defer conn.Close() _, err = conn.Write([]byte("Hello, Server!")) if err != nil { fmt.Println("发送失败:", err) return } fmt.Println("消息已发送") }
这段代码会尝试连接本地8080端口,并发送一条消息过去。如果服务端正常运行,应该能接收到这条“Hello, Server!”。
需要注意几点:
实际开发中,你会发现有些细节容易被忽略:
举个例子,如果你想给连接加个5秒超时,可以这样写:
conn, err := net.DialTimeout("tcp", "localhost:8080", 5*time.Second)
这样即使网络不通,最多等5秒就会报错退出。
Golang做TCP编程非常方便,标准库已经帮你屏蔽了很多底层细节。只要掌握服务端监听、客户端连接、数据收发这几个步骤,就可以完成基本功能了。
当然,真正上线的项目还需要考虑更多,比如心跳机制、协议编解码、连接池管理等等。但这些都属于进阶内容,先从最基础的做起,慢慢深入也不难。
基本上就这些。
以上就是Golang网络编程如何建立TCP连接 TCP客户端与服务端实现示例的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号