【发布时间】:2022-01-24 14:03:26
【问题描述】:
我正在尝试找到一种标准方法来关闭 UDP 连接中客户端和服务器之间的连接。
目前,我想出了以下解决方案,但是,我不确定这是否是惯用的方式?
基本上我在服务器端(handleClient 函数)所做的是将 nil 写入 UDP 地址的conn.WriteTo(nil, Addr)。在客户端我检查read()函数是否检索到任何数据,如果读取字节数为零,则客户端放弃读取。
if n ==0 || err != nil {
break
}
这里是my simplified Server.go 文件:
func handleClient(conn *net.UDPConn) {
b := make([]byte, 1024)
n, Addr, err := conn.ReadFrom(b[0:])
if err != nil {
panic(err)
}
fmt.Println("read: ", n, " bytes", Addr.String())
// write the data back to the client, just for debug purpose
conn.WriteTo(b[0:n], Addr)
// let the client know that server has no more data
conn.WriteTo(nil, Addr)
}
conn, err := net.Dial("udp", ":14000")
if err != nil {
panic(err)
}
defer conn.Close()
conn.Write([]byte("I'm client "))
for {
b := make([]byte, 512)
n, err := conn.Read(b)
if n ==0 || err != nil {
fmt.Println(">", n, err)
break
}
fmt.Println(string(b))
}
fmt.Println("finished.")
【问题讨论】:
标签: go