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);
}
}


