Go语言实现UDP通信
UDP协议
UDP协议(User Datagram Protocol)中文名称是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,不需要建立连接就能直接进行数据发送和接收,属于不可靠的、没有时序的通信,但是UDP协议的实时性比较好,通常用于视频直播相关领域。
UDP服务端
使用Go语言的net
包实现的UDP服务端代码如下:
// UDP/server/main.go
// UDP server端
package main
import (
"fmt"
"net"
"strings"
)
func main() {
conn, err := net.ListenUDP("udp", &net.UDPAddr{
IP: net.IPv4(127, 0, 0, 1),
Port: 2000,
})
if err != nil {
fmt.Println("Listen failed , err:", err)
return
}
defer conn.Close()
var data [1024]byte
for {
n, addr, err := conn.ReadFromUDP(data[:]) // 接收数据
if err != nil {
fmt.Println("ReadfromUdp failed, err", err)
return
}
fmt.Println("Client Send Message : ", data[:n])
reply := strings.ToUpper(string(data[:n]))
conn.WriteToUDP([]byte(reply), addr) //给Client 回发大写的消息
}
}
UDP客户端
使用Go语言的net
包实现的UDP客户端代码如下:
// UDP 客户端
package main
import (
"bufio"
"fmt"
"net"
"os"
)
func main() {
//创建socket对象
socket, err := net.DialUDP("udp", nil, &net.UDPAddr{
IP: net.IPv4(127, 0, 0, 1),
Port: 2000,
})
if err != nil {
fmt.Println("Dialudp failed , err : ", err)
return
}
defer socket.Close()
//scanIn
reader := bufio.NewReader(os.Stdin)
var reply [1024]byte
for {
msg, _ := reader.ReadString('\n')
socket.Write([]byte(msg))
n, _, err := socket.ReadFromUDP(reply[:])
if err != nil {
fmt.Println("readfromudp failed , err : ", err)
return
}
fmt.Println("收到Server回复消息:", string(reply[:n]))
}
}