新闻中心
如何用Golang实现UDP数据发送与接收_Golang UDP通信实践
UDP是无连接协议,适用于实时性要求高的场景;Golang通过net包提供高效支持,使用ResolveUDPAddr解析地址,DialUDP或WriteToUDP发送数据,ListenUDP监听并用ReadFromUDP接收,可实现单播、广播或多播通信。

UDP(用户数据报协议)是一种无连接的传输层协议,适用于对实时性要求高、能容忍少量丢包的场景,比如音视频通信、监控系统或心跳探测。Golang标准库 net 包对 UDP 通信提供了简洁高效的封装,实现发送与接收非常方便。
创建UDP连接并发送数据
在 Golang 中,发送 UDP 数据前需要解析目标地址,并通过 net.DialUDP 或直接使用 net.UDPConn.WriteToUDP 发送。以下是一个发送字符串数据的示例:
package main
import (
"net"
"fmt"
)
func main() {
// 解析服务器地址
addr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8080")
if err != nil {
fmt.Println("地址解析失败:", err)
return
}
// 建立 UDP 连接
conn, err := net.DialUDP("udp", nil, addr)
if err != nil {
fmt.Println("连接失败:", err)
return
}
defer conn.Close()
// 发送数据
message := "Hello UDP Server"
_, err = conn.Write([]byte(message))
if err != nil {
fmt.Println("发送失败:", err)
return
}
fmt.Println("数据已发送:", message)
}
这段代码向本地 8080 端口发送一条消息。注意,UDP 是无连接的,DialUDP 只是建立了一个绑定远端地址的连接句柄,实际并不握手。
监听UDP端口并接收数据
接收端需绑定本地地址并持续监听数据包。使用 net.ListenUDP 创建一个 UDP 服务端,然后调用 ReadFromUDP 接收数据:
package main
import (
"net"
"fmt"
)
func main() {
// 监听本地 8080 端口
addr, err := net.ResolveUDPAddr("udp", ":8080")
if err != nil {
fmt.Printl
n("地址解析失败:", err)
return
}
conn, err := net.ListenUDP("udp", addr)
if err != nil {
fmt.Println("监听失败:", err)
return
}
defer conn.Close()
fmt.Println("UDP 服务已启动,等待数据...")
buffer := make([]byte, 1024)
for {
n, clientAddr, err := conn.ReadFromUDP(buffer)
if err != nil {
fmt.Println("读取失败:", err)
continue
}
fmt.Printf("收到来自 %s 的消息: %s\n", clientAddr, string(buffer[:n]))
// 可选:回复客户端
response := "收到你的消息"
conn.WriteToUDP([]byte(response), clientAddr)
}
}
服务端持续从缓冲区读取数据,并打印来源地址和内容。也可以根据业务逻辑回传响应。
无需连接的发送方式(WriteToUDP)
如果不想维护连接状态,可以直接使用 WriteToUDP。这种方式更贴近 UDP 的无连接本质:
android rtsp流媒体播放介绍 中文WORD版
本文档主要讲述的是android rtsp流媒体播放介绍;实时流协议(RTSP)是应用级协议,控制实时数据的发送。RTSP提供了一个可扩展框架,使实时数据,如音频与视频,的受控、点播成为可能。数据源包括现场数据与存储在剪辑中数据。该协议目的在于控制多个数据发送连接,为选择发送通道,如UDP、组播UDP与TCP,提供途径,并为选择基于RTP上发送机制提供方法。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
1
查看详情
conn, err := net.ListenUDP("udp", &net.UDPAddr{Port: 0}) // 随机端口
if err != nil { panic(err) }
defer conn.Close()
dest, _ := net.ResolveUDPAddr("udp", "127.0.0.1:8080")
_, err = conn.WriteToUDP([]byte("无连接发送"), dest)
if err != nil {
fmt.Println("发送失败:", err)
}
这种模式适合一次性发包,如日志上报或广播通知。
处理广播与多播(可选扩展)
UDP 支持广播和多播通信。若要发送广播,确保目标地址为广播地址(如 255.255.255.255),并开启 socket 的广播选项:
conn, err := net.ListenUDP("udp", &net.UDPAddr{IP: net.IPv4zero, Port: 9999})
// ... 设置广播选项需使用 syscall(略)
// 发送到 255.255.255.255:9999 实现局域网广播
多播则需加入特定组播组(如 224.0.0.1),适用于一对多消息分发。
基本上就这些。Golang 的 UDP 编程简单直接,重点在于地址解析、连接建立与读写控制。只要理解 UDP 无连接、不可靠但高效的特点,就能灵活应用于各类网络场景。不复杂但容易忽略的是错误处理和缓冲区大小设置,建议始终检查返回值并合理分配 buffer。
以上就是如何用Golang实现UDP数据发送与接收_Golang UDP通信实践的详细内容,更多请关注其它相关文章!
# 性要求
# 开源网站营销推广
# 房地产网站建设模板
# 金阊快照推广和网站制作
# 辽源seo助手哪家好用
# 苏州网站建设案例课堂
# 竞价推广招聘网站
# 校园网站建设哪家便宜
# 珠海做seo优化
# 广东安徽抖音关键词排名
# 地产营销推广提案模板
# 组播
# 是一个
# go
# 服务端
# 绑定
# 可选
# 如何用
# 的是
# 适用于
# 流媒体
# 标准库
# ai
# 端口
# golang
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
c++如何使用TBB库进行任务并行_c++ Intel线程构建模块
PyTorch模型训练准确率不提升:诊断与修复常见指标计算错误
TikTok搜索结果不显示如何解决 TikTok搜索刷新优化方法
在Socket.IO连接中实现Access Token自动更新与动态重连
MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复
c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解
在J*a中如何捕获IndexOutOfBoundsException_索引越界异常防护方法说明
sublime怎么格式化代码_sublime代码美化与一键排版插件配置
J*a递归快速排序中静态变量的状态管理与陷阱
Go语言中JSON数据解码与字段访问指南
win11 Snap Layouts怎么用 Win11窗口布局与分屏多任务高效指南【必学】
iwriter统一登录平台 iwrite账号密码登录页面
C++的std::forward_list怎么用_C++ STL中单向链表容器的特点与应用
LINUX的perf命令入门_LINUX官方性能分析工具的使用与解读
2026年CSGO开箱网站推荐 CSGO开箱平台精选
HTML空白字符处理机制:渲染、DOM与编码实践
zookeeper 都有哪些功能?
快手网页版在线登录 快手网页版官网入口快速访问
如何优雅地解决Livewire文件上传难题?SpatieLivewireFilepond让一切变得简单
windows10怎么关闭系统提示音_windows10彻底静音设置方法
Pyrogram与g4f集成:异步编程实践与常见错误解决
在VS Code中配置和运行Dart程序的完整步骤
AO3最新官网入口公告_2025AO3镜像站实时查询方法
Pandas DataFrame 高效批量赋值:告别循环与笛卡尔积误区
一加Ace 6T支持全新明眸护眼:通过了最严苛的护眼小金标认证
优化MinIO list_objects_v2 操作的性能瓶颈与最佳实践
解决Tabulator日期时间排序问题的专业指南
Kafka Streams中基于消息头条件过滤消息的实现指南
AO3最新可访问网址 Archive of Our Own官方在线入口
j*a toString()的覆盖
J*aScript异步迭代器_j*ascript异步遍历
如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题
漫蛙MANWA漫画主页官方入口 漫蛙漫画最新在线阅读地址
Python大型XML文件高效流式解析教程
Go调试环境为何无法启动_Go调试器启动失败原因与解决策略
Win11 BitLocker密码忘了怎么办 Win11找回BitLocker恢复密钥方法【解决】
Win11如何开启讲述人功能 Win11屏幕阅读器(讲述人)开启与关闭【教程】
怎样使用“本地安全策略”提升Windows安全性_Secpol.msc配置指南【高手】
12306几点到几点不能订票? | 官方最新系统维护时间全解析
自定义Bag-of-Words实现:处理带负号的词汇权重
Windows 11怎么彻底关闭定位_Windows 11服务中禁用Geolocation
Python vgamepad库按键模拟:正确使用XUSB_BUTTON常量
excel怎么制作工资条 excel快速生成工资条的方法
品牌机怎么重装系统 联想/戴尔/惠普笔记本恢复出厂系统教程
Golang如何实现简单的Web表单_Golang表单提交与验证处理方法
解决移动端滚动问题的overflow属性应用指南
uc浏览器网页版入口 uc浏览器网页版最新网址
手机CPU怎么影响游戏体验_手机CPU对游戏性能的影响分析
如何在J*a中实现统一对象行为接口_项目大型化时的接口规范化
html网页设计源代码怎么运行_运行html网页设计源代码步骤【指南】


2025-11-18
浏览次数:次
返回列表
n("地址解析失败:", err)
return
}
conn, err := net.ListenUDP("udp", addr)
if err != nil {
fmt.Println("监听失败:", err)
return
}
defer conn.Close()
fmt.Println("UDP 服务已启动,等待数据...")
buffer := make([]byte, 1024)
for {
n, clientAddr, err := conn.ReadFromUDP(buffer)
if err != nil {
fmt.Println("读取失败:", err)
continue
}
fmt.Printf("收到来自 %s 的消息: %s\n", clientAddr, string(buffer[:n]))
// 可选:回复客户端
response := "收到你的消息"
conn.WriteToUDP([]byte(response), clientAddr)
}
}