Go语言---基于UDP的Socket编程

Go语言—基于UDP的Socket编程

博客说明

文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!

UDP简介

UDP协议(User Datagram Protocol)中文名称是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,不需要建立连接就能直接进行数据发送和接收,属于不可靠的、没有时序的通信,但是UDP协议的实时性比较好,通常用于视频直播相关领域。

服务端实现

package main

import (
	"fmt"
	"net"
)

func main(){
	//监听udp
	listen,err := net.ListenUDP("udp",&net.UDPAddr{
		IP:net.IPv4(0,0,0,0),
		Port: 1021,
	})
	if err != nil {
		fmt.Println("监听失败,err:",err)
		return
	}

	//关闭连接
	defer listen.Close()

	for {
		var data [1024]byte
		//读取
		n, addr ,err := listen.ReadFromUDP(data[:])
		if err != nil{
			fmt.Println("读取失败,err:",err)
			continue
		}
		fmt.Printf("接收的内容是:%v,来自地址:%v,字节数量:%v\n",string(data[:n]), addr, n)
		//发送数据
		_, err  = listen.WriteToUDP(data[:n],addr)
		if err != nil{
			fmt.Println("发送失败,err:",err)
			continue
		}
	}

}

客户端实现

package main

import (
	"fmt"
	"net"
)

func main(){
	socket, err := net.DialUDP("udp",nil,&net.UDPAddr{
		IP:  net.IPv4(0,0,0,0) ,
		Port: 1021,
	})
	if err != nil{
		fmt.Println("连接失败,err:",err)
		return
	}

	defer socket.Close();

	sendData := []byte("你好,服务器")
	//发送数据
	_, err = socket.Write(sendData)
	if err != nil{
		fmt.Println("发送失败,err:",err)
		return
	}
	//接受数据
	data := make([]byte,4096)
	n, remoteAddr, err := socket.ReadFromUDP(data)
	if err != nil{
		fmt.Println("接受失败,err:",err)
		return
	}
	fmt.Printf("发送的信息:%v,目标地址:%v,字节数量:%v\n",string(data[:n]),remoteAddr,n)
}

编译测试

使用的是goland

首先运行server,然后再运行client

在这里插入图片描述

运行客户端默认发送消息

在这里插入图片描述

服务端收到

在这里插入图片描述

感谢

万能的网络

以及勤劳的自己

发布了199 篇原创文章 · 获赞 531 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_45163122/article/details/105119435
今日推荐