🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 示例 server <details> <summary>server.go</summary> ``` package main import ( "fmt" "net" ) func main() { // 如果第二参数为nil,它会使用系统指定多播接口,但是不推荐这样使用 addr, err := net.ResolveUDPAddr("udp", "224.0.0.250:9981") if err != nil { fmt.Println(err) } listener, err := net.ListenMulticastUDP("udp", nil, addr) if err != nil { fmt.Println(err) return } fmt.Printf("Local: <%s> \n", listener.LocalAddr().String()) data := make([]byte, 1024) for { n, remoteAddr, err := listener.ReadFromUDP(data) if err != nil { fmt.Printf("error during read: %s", err) } fmt.Printf("<%s> %s\n", remoteAddr, data[:n]) _, err = listener.WriteToUDP(data[:n], remoteAddr) if err != nil { fmt.Printf("%+v\n", err) } } } ``` </details> <br/> <details> <summary>client.go</summary> ``` package main import ( "fmt" "log" "net" "os" ) func main() { // 当在本机测试时注意选择的服务器的地址只要填 127.0.0.1, 而不是 224.0.0.250 // 如果是非本机服务器,填 192.168.x.x ip := net.ParseIP("192.168.0.166") // srcAddr := &net.UDPAddr{IP: net.IPv4zero, Port: 0} dstAddr := &net.UDPAddr{IP: ip, Port: 9981} conn, err := net.DialUDP("udp", nil, dstAddr) if err != nil { fmt.Println(err) } defer conn.Close() fmt.Printf("%+v\n", conn.RemoteAddr()) go func() { data := make([]byte, 1024) for { n, addr, err := conn.ReadFromUDP(data) if err != nil { log.Println(err) continue } fmt.Printf("<%+v> %s\n", addr.AddrPort().String(), data[:n]) } }() conn.Write([]byte("hello")) b := make([]byte, 1) os.Stdin.Read(b) } ``` </details> <br/> 多对一场景: 假设服务端ip为192.168.0.166与192.168.0.160,设置客户端ip为224.0.0.1,多个服务端可同时接收消息,但是多对多场景需要目前无法做到双向通信 一对一场景 假设服务器ip 为 192.168.0.166, 客户端ip填写 192.168.0.166,可进行双向通信