udp與tcp的不同在於客戶端請求方式不同,udp缺少Accept函數。
一個簡單的udp客戶端:
package main; import ( "net" "log" "fmt" ) func chkError(err error) { if err != nil { log.Fatal(err); } } func main() { //獲取udpaddr udpaddr, err := net.ResolveUDPAddr("udp4", "127.0.0.1:8080"); chkError(err); //連接,返回udpconn udpconn, err2 := net.DialUDP("udp", nil, udpaddr); chkError(err2); //寫入數據 _, err3 := udpconn.Write([]byte("client\r\n")); chkError(err3); buf := make([]byte, 256); //讀取服務端發送的數據 _, err4 := udpconn.Read(buf); chkError(err4); fmt.Println(string(buf)); }
udp服務端代碼:
package main; import ( "net" "log" "fmt" ) func chkError(err error) { if err != nil { log.Fatal(err); } } func clientHandle(conn *net.UDPConn) { defer conn.Close(); buf := make([]byte, 256); //讀取數據 //注意這里返回三個參數 //第二個是udpaddr //下面向客戶端寫入數據時會用到 _, udpaddr, err := conn.ReadFromUDP(buf); if err != nil { return; } fmt.Println(string(buf)); conn.WriteToUDP([]byte("hello,client \r\n"), udpaddr); } func main() { udpaddr, err := net.ResolveUDPAddr("udp4", "127.0.0.1:8080"); chkError(err); //監聽端口 udpconn, err2 := net.ListenUDP("udp", udpaddr); chkError(err2); //udp沒有對客戶端連接的Accept函數 for { clientHandle(udpconn); } }