UDP简介
UDP协议(User Datagram Protocol)中文名称是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,不需要建立连接就能直接进行数据发送和接收,属于不可靠的、没有时序的通信,但是UDP协议的实时性比较好,通常用于视频直播相关领域。
go实现
服务端实现:
package main
import (
"fmt"
"net"
)
func main() {
listen, err := net.ListenUDP("udp", &net.UDPAddr{
IP: net.IPv4(127, 0, 0, 1),
Port: 30000,
})
if err != nil {
fmt.Printf("listen failed,err:%v\n", err)
return
}
defer listen.Close()
for {
var buf [1024]byte
n, addr, err := listen.ReadFromUDP(buf[:])
if err != nil {
fmt.Printf("read udp failed,err:%v\n", err)
return
}
fmt.Printf("接收到的数据:%v\n", string(buf[:n]))
_, err = listen.WriteToUDP(buf[:n], addr)
if err != nil {
fmt.Printf("write to %v failed,err:%v\n", addr, err)
return
}
}
}
客户端实现:
package main
import (
"bufio"
"fmt"
"net"
"os"
"strings"
)
//tcp client demo
func main() {
//1、与服务端建立连接
conn, err := net.Dial("tcp", "127.0.0.1:20002")
if err != nil {
fmt.Printf("dial failed, err:%v\n", err)
return
}
//2、利用该连接进行数据的发送和接收
input := bufio.NewReader(os.Stdin)
for {
s, _ := input.ReadString('\n')
s = strings.TrimSpace(s)
if strings.ToUpper(s) == "Q" {
return
}
//给服务端发消息
_, err := conn.Write([]byte(s))
if err != nil {
fmt.Printf("send failed,err:%v\n", err)
return
}
//从服务端接收回复的消息
var buf [1024]byte
n, err := conn.Read(buf[:])
if err != nil {
fmt.Printf("read failed,err:%v\n", err)
return
}
fmt.Printf("收到服务端回复:%v\n", string(buf[:n]))
}
}