版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33781658/article/details/84539925
UDP通信
UDP是无连接的,不可靠的报文传输,但是速度很快
由于UDP是无连接的,所以服务器端不需要额外创建监听的套接字
只用指定好IP和port端口,监听这个地址,等待客户端直接通信即可
我们来写一个简单的服务器和客户端
涉及到的方法有:
func ResolveUDPAddr(net, addr string) (*UDPAddr, error)
func ListenUDP(net string, laddr *UDPAddr) (*UDPConn, error)
func (c *UDPConn) WriteToUDP(b []byte, addr *UDPAddr) (int, error)
func (c *IPConn) WriteTo(b []byte, addr Addr) (int, error)
服务器
func main() {
addr, err1 := net.ResolveUDPAddr("udp", "127.0.0.1:8080")
conn, err2 := net.ListenUDP("udp", addr)
if err1 != nil || err2 != nil {
fmt.Println("服务器启动失败...")
return
}
defer conn.Close()
fmt.Println("服务器启动成功...")
for {
arr := make([]byte, 1024)
num, udpAddr, err := conn.ReadFromUDP(arr)
if err != nil {
fmt.Println("读取失败...")
return
}
go func() {
str := "" + udpAddr.String() + "发来了" + string(arr[:num])
fmt.Println(str)
resString := "服务器已收到..."
conn.WriteToUDP([]byte(resString), udpAddr)
}()
}
}
客户端
func main() {
conn, err := net.Dial("udp", "127.0.0.1:8080")
if err != nil {
fmt.Println("连接失败...", err)
return
}
defer conn.Close()
fmt.Println("连接成功...")
for {
arr := make([]byte, 1024)
num, err := os.Stdin.Read(arr)
if err != nil {
fmt.Println("输入失败...")
return
}
conn.Write(arr[:num])
resArr := make([]byte, 1024)
n, _ := conn.Read(resArr)
fmt.Println(string(resArr[:n]))
}
}
还是很简单的