Go语言作为一种高效、简洁的编程语言,近年来在后端开发和网络编程领域得到了广泛应用。本文将从TCP与UDP的基本概念入手,详细解析如何使用Go语言实现TCP与UDP服务器,并通过代码示例加深理解。
Go语言提供了net
包来支持网络编程,其中包含创建TCP和UDP服务器的核心功能。以下是常用的几个函数:
net.Listen("tcp", ":port")
:监听TCP连接。net.Dial("tcp", "host:port")
:发起TCP连接。net.ResolveUDPAddr("udp", ":port")
:解析UDP地址。net.ListenUDP("udp", addr)
:监听UDP数据包。net.Listen
创建一个TCP监听器。package main
import (
"bufio"
"fmt"
"net"
)
func handleConnection(conn net.Conn) {
defer conn.Close()
reader := bufio.NewReader(conn)
for {
message, err := reader.ReadString('\n')
if err != nil {
fmt.Println("Error reading:", err.Error())
break
}
fmt.Print("Message Received:", string(message))
newMessage := "Received: " + message
conn.Write([]byte(newMessage)) // 发送回执消息
}
}
func main() {
listener, err := net.Listen("tcp", ":8080")
if err != nil {
fmt.Println("Error starting server:", err)
return
}
defer listener.Close()
fmt.Println("Server started on port 8080")
for {
conn, err := listener.Accept()
if err != nil {
fmt.Println("Error accepting connection:", err.Error())
continue
}
go handleConnection(conn) // 启动新goroutine处理连接
}
}
net.ListenUDP
绑定到指定的UDP端口。ReadFromUDP
读取来自客户端的数据包。WriteToUDP
向客户端发送响应。package main
import (
"fmt"
"net"
)
func main() {
addr, err := net.ResolveUDPAddr("udp", ":8081")
if err != nil {
fmt.Println("Error resolving address:", err)
return
}
conn, err := net.ListenUDP("udp", addr)
if err != nil {
fmt.Println("Error listening:", err)
return
}
defer conn.Close()
fmt.Println("UDP server started on port 8081")
buffer := make([]byte, 1024)
for {
n, remoteAddr, err := conn.ReadFromUDP(buffer)
if err != nil {
fmt.Println("Error reading from UDP:", err)
continue
}
fmt.Printf("Message received from %s: %s\n", remoteAddr, string(buffer[:n]))
response := []byte("Hello, UDP client!")
_, err = conn.WriteToUDP(response, remoteAddr)
if err != nil {
fmt.Println("Error writing to UDP:", err)
}
}
}
KeepAlive
保持长连接。本文介绍了Go语言中TCP与UDP服务器的实现方法,并通过代码示例展示了其具体应用。无论是构建高性能的Web服务还是设计低延迟的实时通信系统,掌握这两种协议的实现方式都至关重要。