65-UDP通信

版权声明:本文为博主原创文章,未经博主允许不得转载。 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]))
	}

}



还是很简单的










猜你喜欢

转载自blog.csdn.net/qq_33781658/article/details/84539925
今日推荐