package main import ( "fmt" "net" "time" ) func main() { // UDP服务器的地址和端口(重要提醒:启动UDP服务器时要使用192.168.*.*,不能使用127.0.0.1) var address = "192.168.*.*:9292" var err error // 解析UDP服务器地址 var udpAddr *net.UDPAddr udpAddr, err = net.ResolveUDPAddr("udp4", address) if err != nil { fmt.Println("解析UDP服务器地址失败:" + err.Error()) return } // 连接UDP服务器 var udpConn *net.UDPConn udpConn, err = net.DialUDP("udp", nil, udpAddr) if err != nil { fmt.Println("连接UDP服务器失败:" + err.Error()) return } // 断开连接 defer func(udpConn *net.UDPConn) { err = udpConn.Close() if err != nil { fmt.Println("断开连接失败:" + err.Error()) } }(udpConn) // 发送数据到UDP服务器 _, err = udpConn.Write([]byte("PHP是世界上最好的语言")) if err != nil { fmt.Println("发送数据到UDP服务器失败:" + err.Error()) return } // 接收UDP服务器响应数据 go func() { var buffer = make([]byte, 1024) var bytes int // 响应数据字节数(一个汉字占3个字节) var addr *net.UDPAddr for { bytes, addr, err = udpConn.ReadFromUDP(buffer) // 重要提醒:这里会发生阻塞,直到收到响应数据 if err != nil { fmt.Println("接收UDP服务器响应数据失败:" + err.Error()) return } fmt.Printf("收到UDP服务器(%s)的数据(%d字节):%s\n", addr.String(), bytes, buffer[:bytes]) } }() // 休眠一段时间,让UDP服务器有充足时间返回数据 time.Sleep(time.Second * 10) }
Copyright © 2024 码农人生. All Rights Reserved