📅  最后修改于: 2023-12-03 15:15:22.298000             🧑  作者: Mango
本文将介绍如何使用Golang编写一个UDP服务器,并提供一个示例代码来帮助读者更好地理解。
UDP(User Datagram Protocol)是一种不可靠的传输协议,它不保证数据的可靠传输,也不建立连接。相比TCP,UDP具有以下优点:
因此,UDP适用于一些实时性要求较高、对数据可靠性要求较低的应用场景。
Golang的标准库已经提供了UDP服务器的实现,以下是一个简单的UDP服务器示例代码:
package main
import (
"fmt"
"net"
)
func main() {
port := ":8080"
conn, err := net.ListenPacket("udp", port)
if err != nil {
panic(err)
}
defer conn.Close()
fmt.Printf("UDP server is listening on %s\n", port)
buffer := make([]byte, 1024)
for {
n, addr, err := conn.ReadFrom(buffer)
if err != nil {
fmt.Printf("Error occurred while reading: %s\n", err.Error())
continue
}
msg := string(buffer[:n])
fmt.Printf("Received message from %s: %s\n", addr.String(), msg)
_, err = conn.WriteTo([]byte("Message received"), addr)
if err != nil {
fmt.Printf("Error occurred while writing: %s\n", err.Error())
continue
}
fmt.Println("Response sent successfully")
}
}
代码解析:
net.ListenPacket()
方法创建了一个UDP监听器。conn.ReadFrom()
方法接收客户端发送的UDP消息,并输出接收到的消息内容和发送源地址。string()
函数将字节缓冲区转换为字符串类型。conn.WriteTo()
方法向客户端发送响应消息,并输出响应发送的结果信息。将以上代码保存为main.go
文件,使用Golang编译器编译即可:
go build main.go
运行编译后的二进制文件即可启动UDP服务器:
./main
打开一个新的终端窗口,使用netcat
命令模拟UDP客户端发送消息:
echo "hello, UDP server" | nc -w1 -u 127.0.0.1 8080
在UDP服务器终端窗口中,可以看到类似下面的输出:
Received message from 127.0.0.1:53132: hello, UDP server
Response sent successfully
说明UDP服务器已经能够成功接收到客户端发送的消息,并向客户端发送了响应消息。
本文介绍了如何使用Golang编写一个简单的UDP服务器,并提供了示例代码和运行方法。读者可以根据自己的需求修改代码以满足不同的应用场景。