0

0

Golang netUDP数据传输操作示例

P粉602998670

P粉602998670

发布时间:2025-10-07 15:57:01

|

251人浏览过

|

来源于php中文网

原创

Go语言通过net包实现UDP通信,服务端使用ListenUDP监听并接收数据,客户端通过DialUDP发送消息并接收响应,利用goroutine可支持并发处理,适用于高性能、低延迟场景。

golang netudp数据传输操作示例

Go语言通过net包提供了对UDP协议的良好支持,适合实现轻量级、高性能的数据传输。下面是一个简单的Golang中使用*net.UDPConn进行UDP数据收发的示例,包括服务端接收和客户端发送操作。

UDP服务端:监听并接收数据

服务端绑定到指定地址和端口,持续监听来自客户端的UDP消息。

package main

import ( "fmt" "net" )

func main() { // 绑定本地地址和端口 addr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8080") if err != nil { panic(err) }

conn, err := net.ListenUDP("udp", addr)
if err != nil {
    panic(err)
}
defer conn.Close()

fmt.Println("UDP服务器已启动,监听 8080 端口...")

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 := "收到: " + string(buffer[:n])
    conn.WriteToUDP([]byte(response), clientAddr)
}

}

UDP客户端:发送数据并接收响应

客户端向服务端发送一条消息,并等待返回的响应。

package main

import ( "fmt" "net" "time" )

func main() { serverAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8080") if err != nil { panic(err) }

conn, err := net.DialUDP("udp", nil, serverAddr)
if err != nil {
    panic(err)
}
defer conn.Close()

message := "Hello UDP Server"
_, err = conn.Write([]byte(message))
if err != nil {
    fmt.Println("发送失败:", err)
    return
}

fmt.Println("已发送消息:", message)

// 设置读取超时
conn.SetReadDeadline(time.Now().Add(5 * time.Second))

buffer := make([]byte, 1024)
n, _, err := conn.ReadFromUDP(buffer)
if err != nil {
    fmt.Println("接收响应失败:", err)
    return
}

fmt.Println("收到回复:", string(buffer[:n]))

}

关键点说明

地址解析:使用net.ResolveUDPAddr将字符串格式的地址转换为*net.UDPAddr

立即学习go语言免费学习笔记(深入)”;

易通cmseasy免费的企业建站程序2.0 UTF-8 build 201000510 中文版
易通cmseasy免费的企业建站程序2.0 UTF-8 build 201000510 中文版

易通(企业网站管理系统)是一款小巧,高效,人性化的企业建站程序.易通企业网站程序是国内首款免费提供模板的企业网站系统.§ 简约的界面及小巧的体积:后台菜单完全可以修改成自己最需要最高效的形式;大部分操作都集中在下拉列表框中,以节省更多版面来显示更有价值的数据;数据的显示以Javascript数组类型来输出,减少数据的传输量,加快传输速度。 § 灵活的模板标签及模

下载

连接方式差异:

  • ListenUDP用于服务端被动监听
  • DialUDP创建一个已连接的UDP套接字,适合客户端连续通信
  • 也可以用conn.WriteToUDP()发送到任意目标地址

无连接特性:UDP是无状态协议,每次通信都独立,适用于低延迟场景如音视频、心跳包等。

运行示例

先运行服务端,再运行客户端,观察输出:

  • 服务端应打印“收到来自 ... 的消息”
  • 客户端应收到“收到: Hello UDP Server”

基本上就这些。UDP编程在Go中非常直接,结合goroutine还能轻松实现并发处理多个客户端请求,不复杂但容易忽略错误处理和缓冲区大小控制。实际使用中建议加上日志和超时管理。

相关专题

更多
golang如何定义变量
golang如何定义变量

golang定义变量的方法:1、声明变量并赋予初始值“var age int =值”;2、声明变量但不赋初始值“var age int”;3、使用短变量声明“age :=值”等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

180

2024.02.23

golang有哪些数据转换方法
golang有哪些数据转换方法

golang数据转换方法:1、类型转换操作符;2、类型断言;3、字符串和数字之间的转换;4、JSON序列化和反序列化;5、使用标准库进行数据转换;6、使用第三方库进行数据转换;7、自定义数据转换函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

228

2024.02.23

golang常用库有哪些
golang常用库有哪些

golang常用库有:1、标准库;2、字符串处理库;3、网络库;4、加密库;5、压缩库;6、xml和json解析库;7、日期和时间库;8、数据库操作库;9、文件操作库;10、图像处理库。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

340

2024.02.23

golang和python的区别是什么
golang和python的区别是什么

golang和python的区别是:1、golang是一种编译型语言,而python是一种解释型语言;2、golang天生支持并发编程,而python对并发与并行的支持相对较弱等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

209

2024.03.05

golang是免费的吗
golang是免费的吗

golang是免费的。golang是google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的开源编程语言,采用bsd开源协议。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

393

2024.05.21

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

197

2025.06.09

golang相关判断方法
golang相关判断方法

本专题整合了golang相关判断方法,想了解更详细的相关内容,请阅读下面的文章。

191

2025.06.10

golang数组使用方法
golang数组使用方法

本专题整合了golang数组用法,想了解更多的相关内容,请阅读专题下面的文章。

253

2025.06.17

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

0

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
golang socket 编程
golang socket 编程

共2课时 | 0.1万人学习

nginx浅谈
nginx浅谈

共15课时 | 0.8万人学习

golang和swoole核心底层分析
golang和swoole核心底层分析

共3课时 | 0.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号