Go语言通过net包实现TCP和UDP编程,支持高性能网络服务。1. TCP通信:使用net.Listen监听端口,Accept接收连接,每个连接由goroutine处理,确保并发;客户端用net.Dial建立连接,收发数据后关闭。2. UDP通信:通过net.ListenPacket或net.DialUDP创建无连接服务,适用于低延迟场景,服务端读取数据包并回发响应。3. 关键点:合理利用goroutine实现并发处理,妥善处理错误,及时释放资源,根据需求选择协议,正确使用IP:Port地址格式。Go的net包简洁高效,易于构建高并发网络应用。

Go语言的net包提供了对网络I/O的支持,包括TCP和UDP通信。使用它可以在不依赖第三方库的情况下实现高性能的网络服务。下面分别介绍如何用net包进行TCP和UDP编程。
TCP通信
TCP是面向连接的协议,适合需要可靠传输的场景。Go中通过net.Listen监听端口,使用Accept接收连接,每个连接返回一个net.Conn接口。
服务端示例:
创建TCP服务器的基本流程是:监听地址 → 接受连接 → 处理数据 → 关闭连接。
package mainimport ( "bufio" "fmt" "net" "strings")func handleConn(conn net.Conn) { defer conn.Close() scanner := bufio.NewScanner(conn) for scanner.Scan() { text := strings.TrimSpace(scanner.Text()) fmt.Fprintf(conn, "Echo: %sn", text) }}func main() { listener, err := net.Listen("tcp", ":8080") if err != nil { panic(err) } defer listener.Close() fmt.Println("Server listening on :8080") for { conn, err := listener.Accept() if err != nil { continue } go handleConn(conn) }}
客户端示例:
使用net.Dial连接服务器,发送请求并读取响应。
立即学习“go语言免费学习笔记(深入)”;
package mainimport ( "bufio" "fmt" "net" "os")func main() { conn, err := net.Dial("tcp", "localhost:8080") if err != nil { panic(err) } defer conn.Close() go func() { scanner := bufio.NewScanner(conn) for scanner.Scan() { fmt.Println("收到:", scanner.Text()) } }() input := bufio.NewScanner(os.Stdin) for input.Scan() { fmt.Fprintf(conn, "%sn", input.Text()) }}
UDP通信
UDP是无连接协议,适用于低延迟、能容忍丢包的场景,比如音视频传输或心跳包。Go中使用net.ListenPacket监听UDP端口,返回net.PacketConn接口。
UDP服务端示例:
服务端绑定地址后循环读取数据包,并可回发响应。
package mainimport ( "fmt" "net")func main() { addr, err := net.ResolveUDPAddr("udp", ":9000") if err != nil { panic(err) } conn, err := net.ListenUDP("udp", addr) if err != nil { panic(err) } defer conn.Close() fmt.Println("UDP server listening on :9000") buffer := make([]byte, 1024) for { n, clientAddr, err := conn.ReadFromUDP(buffer) if err != nil { continue } data := string(buffer[:n]) fmt.Printf("收到来自 %s 的消息: %sn", clientAddr, data) response := fmt.Sprintf("Echo: %s", data) conn.WriteToUDP([]byte(response), clientAddr) }}
UDP客户端示例:
客户端同样使用net.DialUDP或WriteToUDP发送数据包。
package mainimport ( "fmt" "net")func main() { serverAddr, err := net.ResolveUDPAddr("udp", "localhost:9000") if err != nil { panic(err) } conn, err := net.DialUDP("udp", nil, serverAddr) if err != nil { panic(err) } defer conn.Close() message := "Hello UDP Server" conn.Write([]byte(message)) response := make([]byte, 1024) n, _, err := conn.ReadFromUDP(response) if err != nil { fmt.Println("读取响应失败:", err) return } fmt.Println("收到响应:", string(response[:n]))}
关键点说明
掌握以下几点有助于更好使用net包:
并发处理:TCP服务器通常为每个连接启动一个goroutine,避免阻塞后续连接。 错误处理:网络操作容易出错,如连接中断、超时等,需合理处理error。 资源释放:始终用defer conn.Close()确保连接关闭。 协议选择:根据业务需求选TCP(可靠)或UDP(快速)。 地址格式:使用IP:Port形式,如:8080表示本机所有IP的8080端口。基本上就这些。Go的net包设计简洁,配合goroutine能轻松写出高并发网络程序。
以上就是Golang如何使用net包进行TCP/UDP通信的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1413673.html
微信扫一扫
支付宝扫一扫