go - protocolo - udp y tcp




Ir: Cómo recibir un UDP Datagram completo (2)

Mi problema: con net.Read ... Los métodos copian solo el número de bytes del tamaño del byte-array o slice determinado. No quiero asignar el datagrama UDP máximo de 64 kB cada vez, por supuesto.

¿Hay alguna forma de determinar el tamaño del datagrama (que se encuentra en el encabezado del datagrama) o leer de nuevo hasta que el datagrama esté completamente leído?


Por lo general, en un protocolo UDP, los tamaños de paquetes se conocen de antemano y, por lo general, son mucho más pequeños, del orden de 1.5k o menos.

Lo que puede hacer es preasignar un búfer estático de tamaño máximo para todas las lecturas, luego, una vez que sepa el tamaño del datagrama que ha leído del socket, asigne una matriz de bytes con el tamaño real y cópiele los datos. No creo que puedas hacer lecturas adicionales del mismo datagrama.


Pruebe ReadFromUDP :

func (c *UDPConn) ReadFromUDP(b []byte) (n int, addr *UDPAddr, err error)

ReadFromUDP lee un paquete UDP de c, copiando la carga en b. Devuelve la cantidad de bytes copiados en by la dirección de retorno que estaba en el paquete.

El tamaño del paquete debe estar disponible desde n , que luego puede usar para definir un segmento personalizado (u otra estructura de datos) para almacenar los datagramas. Esto se basa en que el tamaño del datagrama no cambia durante la sesión, lo que realmente no debería ocurrir.





udp