首页 > 后端开发 > Golang > 正文

如何在Golang中实现UDP数据发送与接收

P粉602998670
发布: 2025-11-05 21:56:02
原创
394人浏览过
答案:Go通过net包实现UDP通信,使用net.ListenUDP接收数据,net.DialUDP发送数据。示例包含服务器监听127.0.0.1:8080接收并响应消息,客户端发送“Hello UDP Server!”并接收回复。关键点包括UDP无连接特性、地址解析、读写方式及应用层可靠性处理,适用于日志、心跳等场景。

如何在golang中实现udp数据发送与接收

在Golang中实现UDP数据的发送与接收非常直接,得益于标准库net包对UDP协议的良好支持。你可以使用net.ListenUDP来监听UDP端口接收数据,用net.DialUDPnet.Conn接口发送数据。下面分步骤说明如何实现。

创建UDP服务器接收数据

要接收UDP数据,需要先绑定到一个本地地址和端口,然后持续读取数据包。

示例代码:

<font face="Courier New">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服务器已启动,等待数据...")

    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)
    }
}</font>
登录后复制

创建UDP客户端发送数据

客户端通过连接目标UDP地址,发送数据报文。

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

示例代码:

<font face="Courier New">package main

import (
    "fmt"
    "net"
)

func main() {
    // 解析服务端地址
    addr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8080")
    if err != nil {
        panic(err)
    }

    // 建立UDP连接
    conn, err := net.DialUDP("udp", nil, addr)
    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)

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

    fmt.Println("收到响应:", string(buffer[:n]))
}</font>
登录后复制

关键点说明

无连接特性:UDP是无连接协议,每次发送的数据报独立存在,不保证顺序和可靠性。

腾讯智影-AI数字人
腾讯智影-AI数字人

基于AI数字人能力,实现7*24小时AI数字人直播带货,低成本实现直播业务快速增增,全天智能在线直播

腾讯智影-AI数字人 73
查看详情 腾讯智影-AI数字人

地址解析net.ResolveUDPAddr用于将字符串地址转为*net.UDPAddr类型,是建立通信的前提。

读写方式

  • conn.ReadFromUDP 可获取发送方地址,适合服务器处理多个客户端
  • conn.WriteToUDP 向指定地址发送数据
  • 若使用DialUDP建立连接,则可直接用WriteRead

简单双向通信模型

上述例子实现了请求-响应模式。虽然UDP本身不维护连接,但通过记录客户端地址,服务器可以回发消息,模拟双向通信。

注意:由于UDP不保证送达,如需可靠性,需在应用层添加重传、确认等机制。

基本上就这些。Go的标准库让UDP编程变得简洁高效,适合日志传输、心跳包、DNS查询等场景。

以上就是如何在Golang中实现UDP数据发送与接收的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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