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); } }
时间: 2024-10-28 19:02:26