Go语言网络编程(socket编程)UDP

1、UDP编程

1.1.1. Go语言实现UDP通信

UDP协议

UDP协议(User Datagram Protocol)中文名称是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,不需要建立连接就能直接进行数据发送和接收,属于不可靠的、没有时序的通信,但是UDP协议的实时性比较好,通常用于视频直播相关领域。

UDP服务端

使用Go语言的net包实现的UDP服务端代码如下:

go 复制代码
// UDP/server/main.go

// UDP server端
func main() {
    listen, err := net.ListenUDP("udp", &net.UDPAddr{
        IP:   net.IPv4(0, 0, 0, 0),
        Port: 30000,
    })
    if err != nil {
        fmt.Println("listen failed, err:", err)
        return
    }
    defer listen.Close()
    for {
        var data [1024]byte
        n, addr, err := listen.ReadFromUDP(data[:]) // 接收数据
        if err != nil {
            fmt.Println("read udp failed, err:", err)
            continue
        }
        fmt.Printf("data:%v addr:%v count:%v\n", string(data[:n]), addr, n)
        _, err = listen.WriteToUDP(data[:n], addr) // 发送数据
        if err != nil {
            fmt.Println("write to udp failed, err:", err)
            continue
        }
    }
}

UDP客户端

使用Go语言的net包实现的UDP客户端代码如下:

go 复制代码
// UDP 客户端
func main() {
    socket, err := net.DialUDP("udp", nil, &net.UDPAddr{
        IP:   net.IPv4(0, 0, 0, 0),
        Port: 30000,
    })
    if err != nil {
        fmt.Println("连接服务端失败,err:", err)
        return
    }
    defer socket.Close()
    sendData := []byte("Hello server")
    _, err = socket.Write(sendData) // 发送数据
    if err != nil {
        fmt.Println("发送数据失败,err:", err)
        return
    }
    data := make([]byte, 4096)
    n, remoteAddr, err := socket.ReadFromUDP(data) // 接收数据
    if err != nil {
        fmt.Println("接收数据失败,err:", err)
        return
    }
    fmt.Printf("recv:%v addr:%v count:%v\n", string(data[:n]), remoteAddr, n)
}
相关推荐
pt104318 分钟前
BGP分解实验·15——路由阻尼(抑制/衰减)实验
网络·智能路由器
Danileaf_Guo32 分钟前
用BGP的路由聚合功能聚合大陆路由,效果显著不?
运维·网络·智能路由器
程序猿000001号35 分钟前
网络安全技术简介
网络·安全·web安全
{⌐■_■}1 小时前
【gRPC-gateway】初探grpc网关,插件安装,默认实现,go案例
开发语言·golang·gateway
{⌐■_■}1 小时前
【gRPC-gateway】option定义规则及HttpBody响应
java·服务器·开发语言·golang·gateway
咬光空气3 小时前
Qt 5.14.2 学习记录 —— 이십일 Qt网络和音频
网络·qt·学习
doubt。3 小时前
【BUUCTF】[GXYCTF2019]BabysqliV3.01
网络·安全·web安全·php·代码复审
HMS工业网络4 小时前
Anybus网关EtherNet/IP扫描器:快速、可靠、易配置的新一代网关
网络·物联网·安全
垚垚 Securify 前沿站4 小时前
Linux Samba 低版本漏洞(远程控制)复现与剖析
linux·运维·网络·安全·web安全·网络安全·系统安全
张小小大智慧4 小时前
计算机网络部分知识点(王道考研笔记)
运维·网络·智能路由器