我的問題:使用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) –