我的问题:使用net.Read ...方法只复制给定字节数组或片的大小的字节数。我不想每次都分配64 kB的最大UDP数据报。转到:如何接收整个UDP数据报
有没有一种方法可以确定数据报的大小(数据报头中的数据报的大小)还是再次读取,直到数据报被完全读取?
我的问题:使用net.Read ...方法只复制给定字节数组或片的大小的字节数。我不想每次都分配64 kB的最大UDP数据报。转到:如何接收整个UDP数据报
有没有一种方法可以确定数据报的大小(数据报头中的数据报的大小)还是再次读取,直到数据报被完全读取?
尝试ReadFromUDP:
func (c *UDPConn) ReadFromUDP(b []byte) (n int, addr *UDPAddr, err error)
ReadFromUDP从C读出一个UDP包,复制有效载荷到b中。它返回复制到b中的字节数和包中的返回地址。
包大小应可从n
,然后可以用它来定义自定义切片(或其它数据结构),以数据报存储在这依赖于在会话期间不改变数据报大小,它真的不应该。
通常在UDP协议中,数据包大小是事先知道的,它通常要小得多,大约在1.5k或更小。
你可以做的是为所有读取预分配一个最大大小的静态缓冲区,然后一旦你知道你从套接字读取的数据报的大小,就分配一个具有实际大小的字节数组并将数据复制到它。我不认为你可以做同样的数据报额外的读取。
谢谢,是否担心。我完全想避免这一个额外的复制步骤。 – 0x434D53
检查执行:直接执行socket.h提供的东西。所以别无选择。 – 0x434D53
[这是另一个问题要求有关C接口的同样的事情](http://stackoverflow.com/questions/15446887/udp-read-data-from-the-queue-in-chunks) –