udp server client

Simple udp server

package main

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

func main()  {
    // 组织一个udp地址结构,指定服务器的ip+port
    srvAddr, err := net.ResolveUDPAddr("udp","127.0.0.1:8000")
    if err != nil {
        fmt.Println("net.ResolveUDPAddr err:",err)
        return
    }

    udpConn, err := net.ListenUDP("udp",srvAddr)
    if err != nil {
        fmt.Println("net.ListenUDP err:",err)
        return
    }
    defer udpConn.Close()
    fmt.Println("服务器通信sockct创建完成")

    // 读取客户端的数据
    buf := make([]byte, 4096)
    // 返回3个值,读取到的字节数,客户端的地址,err
    n, cltAddr, err := udpConn.ReadFromUDP(buf)
    if err != nil {
        fmt.Println("udpConn.ReadFromUDP err:",err)
        return
    }
    fmt.Println("读到",cltAddr,string(buf[:n]))

    // 回写数据给客户端
    daytime := time.Now().String()
    _, err = udpConn.WriteToUDP([]byte(daytime),cltAddr)
    if err != nil {
        fmt.Println("udpConn.WriteToUDP err:",err)
        return
    }
}

Simple udp client

package main

import (
    "fmt"
    "net"
)

func main() {
    
    conn, err := net.Dial("udp","127.0.0.1:8000")
    if err != nil {
        fmt.Println("net.Dial err:",err)
        return
    }
    defer conn.Close()

    conn.Write([]byte("hello"))

    buf := make([]byte, 4096)
    n, err := conn.Read(buf)
    if err != nil {
        fmt.Println("conn.Read err:",err)
        return
    }
    fmt.Println("服务器回发:",string(buf[:n]))
}

udp server concurrency

package main

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


func main()  {

    srvAddr, err := net.ResolveUDPAddr("udp","127.0.0.1:8000")
    if err != nil {
        fmt.Println("net.ResolveUDPAddr err:",err)
        return
    }

    udpConn, err := net.ListenUDP("udp",srvAddr)
    if err != nil {
        fmt.Println("net.ListenUDP err:",err)
        return
    }
    defer udpConn.Close()
    fmt.Println("服务器通信sockct创建完成")

    // 读取客户端的数据
    buf := make([]byte, 4096)

    for {
        // 返回3个值,读取到的字节数,客户端的地址,err
        n, cltAddr, err := udpConn.ReadFromUDP(buf)     // --- 主go程读取客户端发送数据
        if err != nil {
            fmt.Println("udpConn.ReadFromUDP err:",err)
            return
        }
        fmt.Println("读到",cltAddr,string(buf[:n]))

        go func ()  {
            // 提取系统当前时间
            daytime := time.Now().String() + "\n"

            // 回写数据给客户端
            _, err = udpConn.WriteToUDP([]byte(daytime), cltAddr)
            if err != nil {
                fmt.Println("WriteToUDP err:", err)
                return
            }
        }()
    }
}

Guess you like

Origin www.cnblogs.com/huyuan1004/p/11299226.html