UDP 服务器 (udp_server.go):
goCopy code
package main
import (
"fmt"
"net"
)
const (
serverAddr = "127.0.0.1:12345"
)
func main() {
// 创建 UDP 地址结构
udpAddr, err := net.ResolveUDPAddr("udp", serverAddr)
if err != nil {
fmt.Println("Error resolving UDP address:", err)
return
}
// 创建 UDP 连接
conn, err := net.ListenUDP("udp", udpAddr)
if err != nil {
fmt.Println("Error listening:", err)
return
}
defer conn.Close()
fmt.Println("UDP server listening on", serverAddr)
// 处理客户端请求
for {
handleClientRequest(conn)
}
}
func handleClientRequest(conn *net.UDPConn) {
buffer := make([]byte, 1024)
// 读取客户端发送的数据
n, addr, err := conn.ReadFromUDP(buffer)
if err != nil {
fmt.Println("Error reading from UDP:", err)
return
}
fmt.Printf("Received message from %s: %s\n", addr, string(buffer[:n]))
// 向客户端发送响应数据
message := []byte("Hello, UDP Client!")
_, err = conn.WriteToUDP(message, addr)
if err != nil {
fmt.Println("Error writing to UDP:", err)
return
}
}
UDP 客户端 (udp_client.go):
goCopy code
package main
import (
"fmt"
"net"
)
const (
serverAddr = "127.0.0.1:12345"
)
func main() {
// 解析服务器 UDP 地址
udpAddr, err := net.ResolveUDPAddr("udp", serverAddr)
if err != nil {
fmt.Println("Error resolving UDP address:", err)
return
}
// 创建 UDP 连接
conn, err := net.DialUDP("udp", nil, udpAddr)
if err != nil {
fmt.Println("Error dialing UDP:", err)
return
}
defer conn.Close()
// 向服务器发送数据
message := []byte("Hello, UDP Server!")
_, err = conn.Write(message)
if err != nil {
fmt.Println("Error writing to UDP:", err)
return
}
// 读取服务器的响应
buffer := make([]byte, 1024)
n, _, err := conn.ReadFromUDP(buffer)
if err != nil {
fmt.Println("Error reading from UDP:", err)
return
}
fmt.Printf("Received response: %s\n", string(buffer[:n]))
}