Server:
package main import ( "fmt" "net" ) func main() { //创建udp地址 udpAddr, _ := net.ResolveUDPAddr("udp", "127.0.0.1:8080") //服务端建立监听 serverConn, err := net.ListenUDP("udp", udpAddr) if err == nil{ fmt.Println("正在8080端口监听。。。") }else { fmt.Println(err) return } defer func() { serverConn.Close() fmt.Println("main over!") }() //与客户端IO //建立1024字节缓冲区 buffer := make([]byte, 1024) for { /* 读取客户端消息到缓冲区 n = 读取到buffer中的字节数 remoteAddress = 数据包的来源地址 err = 超时等错误 */ n, remoteAddress, _ := serverConn.ReadFromUDP(buffer) //从buffer读取数据 contents := buffer[:n] //打印读到的地址和数据 fmt.Printf("客户端:%v %v ",remoteAddress,string(contents)) //回复本条消息 serverConn.WriteToUDP([]byte("孽障!"), remoteAddress) } }
Client:
package main import ( "fmt" "net" ) func main() { //使用udp协议拨号,远程地址127.0.0.1:8080 conn, _ := net.Dial("udp", "127.0.0.1:8080") //程序退出前关闭连接,释放io资源 defer func() { conn.Close() fmt.Println("客户端已退出") }() //创建接收消息的缓冲区 buffer := make([]byte, 1024) //用户要发送的消息文本 var userInput string for{ //接收用户输入 fmt.Print("大神请输入:") fmt.Scan(&userInput) //如果用户输入exit则退出 if userInput == "exit"{ break } //客户端发起交谈 conn.Write([]byte(userInput)) //接收服务端消息 n, err := conn.Read(buffer) fmt.Println(err) fmt.Println("服务端:"+string(buffer[:n])) } }