跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

如何在Golang中使用net处理网络连接_实现TCP和UDP通信

Go语言net包提供简洁高效的并发网络编程接口,支持TCP/UDP通信;TCP服务端用Listen+Accept+goroutine处理连接,客户端用Dial连接并读写;UDP通过ListenUDP实现无连接消息传递;需重视错误处理、连接关闭和超时控制。 Go 语言的
net
包提供了简洁、高效、并发友好的 网络编程 接口,是实现 TCP/UDP 通信的核心工具。它屏蔽了底层系统调用细节,同时天然支持 goroutine,让高并发网络服务开发变得直观可靠。 TCP 服务端:监听与连接处理 TCP 是面向连接的协议,适合需要可靠传输的场景(如 HTTP、RPC)。使用
net.Listen
启动监听,再通过
Accept
获取连接,每个连接建议用独立 goroutine 处理,避免阻塞其他请求。 关键点: 监听地址格式为
"tcp:localhost:8080"
或
"tcp::8080"
(省略 host 表示监听所有网卡)
conn.Read()
和
conn.Write()
是阻塞操作,但因 goroutine 轻量,可安全并发调用 务必关闭连接(
conn.Close()
),否则可能耗尽文件描述符 示例片段: 立即学习 “ go语言免费学习笔记(深入) ”; goln, _ := net.Listen("tcp", ":8080")defer ln.Close()for {conn, err := ln.Accept()if err != nil { continue }go func(c net.Conn) {defer c.Close()io.Copy(c, c) // 回显数据} (conn)} TCP 客户端:建立连接并收发数据 客户端用
net.Dial
主动连接服务端,返回的
Conn
接口同样支持读写。注意设置超时(如
net.DialTimeout
或配合
context
),防止无限等待。 常见做法: Midjourney AI 提示词工具 PHP中文网提供Midjourney AI 提示词在线生成工具,专为解决 AI 绘画“词穷”痛点而生,用户只需输入“一只猫”等简单想法,工具便能利用 AI 智能扩展出包含艺术风格、光影构图、镜头参数及负面提示词的专业级英文 Prompt。它完美兼容 Midjourney V8.1 及 Niji 模型,支持一键复制与参数自动优化,大幅降低创作门槛,是提升出图质量与效率的必备辅助神器。 下载 使用
bufio.Reader/Writer
提升文本交互效率(如按行读取) 对二进制协议,直接操作
conn.Read([]byte)
和
conn.Write([]byte)
错误需检查:连接失败、写入时对方已关闭、读取 EOF 等 示例: goc, err := net.Dial("tcp", "localhost:8080")if err != nil { log.Fatal(err) }defer c.Close()c.Write([]byte("hello"))buf := make([]byte, 1024)n, _ := c.Read(buf)fmt.Printf("recv: %s", buf[:n]) UDP 通信:无连接、轻量级消息传递 UDP 不维护连接状态,适合实时性要求高、能容忍丢包的场景(如 DNS 查询、游戏心跳、日志上报)。Go 中统一用
net.ListenUDP
创建端点,收发均通过
*UDPConn
完成。 要点说明: 服务端绑定地址后,用
ReadFromUDP
接收任意来源的数据包,返回发送方地址 客户端无需显式“连接”,直接用
WriteToUDP
发送,目标地址在每次调用中指定 UDP 数据报有大小限制(通常 65507 字节 ),超长会被截断或丢弃 服务端示例: goaddr, _ := net.ResolveUDPAddr("udp", ":9999")conn, _ := net.ListenUDP("udp", addr)defer conn.Close()buf := make([]byte, 1024)for {n, clientAddr, _ := conn.ReadFromUDP(buf)conn.WriteToUDP(buf[:n], clientAddr)} 错误处理与资源管理 网络操作失败非常常见,不能忽略错误。典型错误包括:
connection refused
(服务未启动)、
i/o timeout
(超时)、
broken pipe
(对方关闭连接)、
too many open files
(未及时关闭连接)。 实用建议: 所有
net.Conn
和
*UDPConn
都应确保关闭,推荐用
defer
或显式
Close()
对长时间连接,设置
SetDeadline
/
SetReadDeadline
/
SetWriteDeadline
防止永久阻塞 生产环境建议结合
context.Context
控制超时与取消,尤其在客户端调用中

相关文章