目录:
- 一、为何UDP不需要listen:
- 二、服务端:
- 1.建立套接字
- 2.对套接字操作
- 循环读取数据
- 回复消息
- 三、客户端:
- 1.连接服务器
- 2.写入数据
- 3.读取消息
一、为何UDP不需要listen
listen()是进入监听状态,表示愿意接收连接请求。
accept()是接受新连接。
listen之后有连接请求就将其放到队列中,accept()时把新连接请求从队列中取出,建立新的socket。
UDP无法保证数据安全是因为只需要收发即可,无需建立连接
而TCP是需要建立连接确保数据的安全性
二、服务端
func main() {
// 1.开启监听(建立套接字)
listener, err := net.ListenUDP("udp", &net.UDPAddr{
IP: net.IPv4(0, 0, 0, 0),
Port: 9091,
})
if err != nil {
log.Fatal(err)
}
defer listener.Close()
// 2.循环读取数据
for {
var data [1024]byte
n, client, err := listener.ReadFromUDP(data[:])
if err != nil {
log.Println(err)
break
}
fmt.Println(client, string(data[:n]))
// 3.回复消息
listener.WriteToUDP([]byte("recevied success!"), client)
}
}
三、客户端
func main() {
// 1.连接获取socket套接字
conn, err := net.DialUDP("udp", nil, &net.UDPAddr{
IP: net.IPv4(172, 31, 50, 249),
Port: 9091,
})
if err != nil {
log.Fatal(err)
}
defer conn.Close()
// 2.发送消息
conn.Write([]byte("jstang"))
// 3.接收消息
data := make([]byte, 1024)
conn.ReadFromUDP(data)
fmt.Println(string(data))
}