package main import ( "fmt" "net" "strings" ) // UDP server func main() { //源码:func ListenUDP(network string, laddr *UDPAddr) (*UDPConn, error) { conn, err := net.ListenUDP("udp", &net.UDPAddr{ IP: net.IPv4(127, 0, 0, 1), Port: 40000, }) if err != nil { fmt.Println("listen UDP failed,err:", err) return } defer conn.Close() // 不需要建立连接,直接收发数据 // 收数据 var data [1024]byte for { //data[:]把数组变成byte类型的切片(引用类型,存到data数组中) n, addr, err := conn.ReadFromUDP(data[:]) //参数是[]byte 切片类型里面是byte(uint8) if err != nil { fmt.Println("read from UDP failed,err:", err) return } fmt.Println(data[:n]) reply := strings.ToUpper(string(data[:n])) // 发送数据 //[]byte(reply) 把字符串转成字节类型的切片 conn.WriteToUDP([]byte(reply), addr) } }
package main import ( "bufio" "fmt" "net" "os" ) // UDP client func main() { //拨号 socket, err := net.DialUDP("udp", nil, &net.UDPAddr{ IP: net.IPv4(127, 0, 0, 1), Port: 40000, }) if err != nil { fmt.Println("连接服务端失败,err:", err) return } defer socket.Close() var reply [1024]byte reader := bufio.NewReader(os.Stdin) for { fmt.Print("请输入内容:") msg, _ := reader.ReadString(' ') //读到一个换行就返回数据(结束) socket.Write([]byte(msg)) // 收回复的数据 n, _, err := socket.ReadFromUDP(reply[:]) if err != nil { fmt.Println("redv reply msg failed,err:", err) return } fmt.Println("收到回复信息:", string(reply[:n])) } }