美文网首页
golang udp编程

golang udp编程

作者: 零一间 | 来源:发表于2019-08-02 16:02 被阅读0次

介绍

用户数据报协议(User Datagram Protocol,缩写为UDP),又称用户数据报文协议,是一个简单的面向数据报(package-oriented)的传输层协议,正式规范为RFC 768。

UDP只提供数据的不可靠传递,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份(所以UDP有时候也被认为是不可靠的数据报协议)。

UDP在IP数据报的头部仅仅加入了复用和数据校验。

由于缺乏可靠性且属于非连接导向协议,UDP应用一般必须允许一定量的丢包、出错和复制粘贴。

注意

1 在接收udp包时,如果接收包时给定的buffer太小的话,就要自己解决粘包问题。
2 udp包的发送和接收不保证一定成功,不保证按正确顺序抵达。
3 如果不允许丢包的情况出现的话,要有重发机制来保证,如:反馈机制确认。

示例

服务端

package main

import (
    "fmt"
    "net"
    "strings"
)

// 读取消息
func handleConnection(udpConn *net.UDPConn) {

    // 读取数据
    buf := make([]byte, 1024)
    len, udpAddr, err := udpConn.ReadFromUDP(buf)
    if err != nil{
        return
    }
    logContent := strings.Replace(string(buf),"\n","",1)
    fmt.Println("server read len:", len)
    fmt.Println("server read data:", logContent)

    // 发送数据
    len, err = udpConn.WriteToUDP([]byte("ok\r\n"), udpAddr)
    if err != nil{
        return
    }

    fmt.Println("server write len:", len,"\n")
}

// udp 服务端
func main() {
    /*
        network: "udp"、"udp4"或"udp6"
        addr: "host:port"或"[ipv6-host%zone]:port"
    */
    udpAddr, _ := net.ResolveUDPAddr("udp4", "127.0.0.1:9998")

    //监听端口
    udpConn, err := net.ListenUDP("udp", udpAddr)
    if err != nil {
        fmt.Println(err)
    }
    defer udpConn.Close()

    fmt.Println("udp listening ... ")

    //udp不需要Accept
    for {
        handleConnection(udpConn)
    }
}

客户端

package main

import (
    "fmt"
    "net"
    "os"
)

func main() {

    udpAddr, _ := net.ResolveUDPAddr("udp4", "127.0.0.1:9998")

    //连接udpAddr,返回 udpConn
    udpConn, err := net.DialUDP("udp", nil, udpAddr)
    if err != nil {
        fmt.Println(err)
        os.Exit(2)
    }
    fmt.Println("udp dial ok ")

    // 发送数据
    len, err := udpConn.Write([]byte("上报日志文件:xxxxxx\r\n"))
    if err != nil{
        return
    }
    fmt.Println("client write len:", len)

    //读取数据
    buf := make([]byte, 1024)
    len, _ = udpConn.Read(buf)
    fmt.Println("client read len:", len)
    fmt.Println("client read data:", string(buf))

}

相关文章

  • golang udp编程

    介绍 用户数据报协议(User Datagram Protocol,缩写为UDP),又称用户数据报文协议,是一个简...

  • Golang网络编程UDP

    UDP协议 UDP协议中文名称使用户数据报协议。UDP是一种无连接的传输层协议不需要建立连接就可以直接进行数据发送...

  • GO UDP编程

    本文介绍golang下的UDP编程,并给到相关示例代码: 用户数据报协议(User Datagram Protoc...

  • TODO:Golang UDP连接简单测试慎用Deadline

    TODO:Golang UDP连接简单测试慎用Deadline UDP 是User Datagram Protoc...

  • 30.3. 企业级开发进阶2.3:UDP编程

    ** 本节内容如下** 什么是UDP协议 UDP网络编程——服务端程序开发 UDP网络编程——客户端程序开发 1....

  • iOS Socket编程-C语言版(UDP)

    1. UDP Socket编程 先讲一讲UDP编程,因为比TCP要简单多了。首先,我们需要明白UDP是用户数据报协...

  • UDP编程

    UDP:User Datagram Protocal 用户数据报协议是 OSI/RM 模型中隶属于传输层的面向无连...

  • UDP编程

    UDP:User Datagram Protocol 用户数据报协议是 OSI/RM 模型中隶属于传输层的面向无连...

  • UDP编程

    udp server udp client

  • UDP 编程

    UDP 编程 服务端例子 TCP 发送数据的时候, 会建立好 TCP 的连接, 所以不需要指定地址, 而 UDP ...

网友评论

      本文标题:golang udp编程

      本文链接:https://www.haomeiwen.com/subject/qbwldctx.html