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
运行客户端默认发送消息
服务端收到
感谢
万能的网络
以及勤劳的自己