最近刚好在处理一个与这个有关的问题,楼主需要的是 udp 连接中 server 端的 IP (由于多 IP 监听导致的,即 ADDR_ANY ),不是需要客户端的 IP 与端口。
在 deepseek 中找了个答案好像能用(用 gpt-o 试了得到的答案无法运行),性能不太清楚怎么样。
```
package main
import (
"fmt"
"net"
"
golang.org/x/net/ipv4"
)
func main() {
addr, err := net.ResolveUDPAddr("udp", "0.0.0.0:1234")
if err != nil {
fmt.Println("Error resolving UDP address:", err)
return
}
conn, err := net.ListenUDP("udp", addr)
if err != nil {
fmt.Println("Error listening on UDP:", err)
return
}
defer conn.Close()
pconn := ipv4.NewPacketConn(conn)
if err := pconn.SetControlMessage(ipv4.FlagDst, true); err != nil {
fmt.Println("Error setting control message:", err)
return
}
buffer := make([]byte, 1024)
for {
n, cm, src, err := pconn.ReadFrom(buffer)
if err != nil {
fmt.Println("Error reading from UDP:", err)
continue
}
if cm != nil && cm.Dst != nil {
fmt.Printf("Received %d bytes from %s to %s\n", n, src, cm.Dst)
} else {
fmt.Printf("Received %d bytes from %s\n", n, src)
}
}
}
```