📌  相关文章
📜  golang udp 服务器示例 - Go 编程语言 - Go 编程语言(1)

📅  最后修改于: 2023-12-03 15:15:22.298000             🧑  作者: Mango

Golang UDP 服务器示例

本文将介绍如何使用Golang编写一个UDP服务器,并提供一个示例代码来帮助读者更好地理解。

UDP简介

UDP(User Datagram Protocol)是一种不可靠的传输协议,它不保证数据的可靠传输,也不建立连接。相比TCP,UDP具有以下优点:

  • UDP具有更低的延迟,适用于实时传输数据,如视频、音频等。
  • UDP的传输包大小较小,对网络带宽的占用也较少。
  • UDP不建立连接,不需要进行握手,减少了网络流量。

因此,UDP适用于一些实时性要求较高、对数据可靠性要求较低的应用场景。

Golang 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")
	}
}

代码解析:

  • 第7行,声明服务器端监听的端口号,这里选择使用8080。
  • 第8行,调用net.ListenPacket()方法创建了一个UDP监听器。
  • 第10行,打印监听即将启动的消息。
  • 第12行,声明一个大小为1024的字节缓冲区,用于存储接收到的UDP消息。
  • 第13~28行,进入一个死循环,调用conn.ReadFrom()方法接收客户端发送的UDP消息,并输出接收到的消息内容和发送源地址。
  • 第20行,使用string()函数将字节缓冲区转换为字符串类型。
  • 第23~27行,调用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服务器,并提供了示例代码和运行方法。读者可以根据自己的需求修改代码以满足不同的应用场景。