码迷,mamicode.com
首页 > 其他好文 > 详细

udp server client

时间:2019-08-04 19:21:57      阅读:49      评论:0      收藏:0      [点我收藏+]

标签:main   listen   def   srv   服务   list   返回   for   完成   

简单的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
    }
}

简单的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并发

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
            }
        }()
    }
}

udp server client

标签:main   listen   def   srv   服务   list   返回   for   完成   

原文地址:https://www.cnblogs.com/huyuan1004/p/11299226.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!