前往:如何接收完整的UDP数据报

0x4*_*D53 5 udp go

我的问题:使用net.Read ...方法仅复制给定字节数组或切片大小的字节数。我当然不想每次都分配64 kB的最大UDP数据报。

有没有办法确定数据报的大小(在数据报标头中)还是再次读取直到完全读取数据报?

Int*_*net 2

尝试从UDP读取:

func (c *UDPConn) ReadFromUDP(b []byte) (n int, addr *UDPAddr, err error)
Run Code Online (Sandbox Code Playgroud)

ReadFromUDP 从 c 读取 UDP 数据包,将有效负载复制到 b。它返回复制到 b 中的字节数以及数据包上的返回地址。

数据包大小应该可以从 获得n,然后您可以使用它来定义自定义切片(或其他数据结构)来存储数据报。这依赖于数据报大小在会话期间不改变,而实际上不应该改变。