Я пытаюсь выяснить, как сериализовать структуру и отправить ее через UDP на мой сервер.Мне удалось на самом деле отправить структуру, но после получения у меня нет никаких значений в ней ... За исключением случаев, когда я статически добавляю число.
В следующем коде я отправляю пакет UDP на порт 8080 с порядковым номером, представляющим собой цифры от 0 до 9.Я добавляю +1 к нему, чтобы показать свою точку зрения.Я ожидаю, что на стороне получателя я должен получить сообщение в части 1-10.Но единственное, что я получаю, это число 1, которое означает, что переменная должна быть установлена на 0.
Чтобы проверить, действительно ли я отправляю 0, я печатаю длину полученного буфера, и это правильная длиначто это должно быть.Поэтому я, должно быть, что-то не так делаю с декодированием.
функция отправки:
func send_udp() {
dst, _ := net.ResolveUDPAddr("udp", "localhost:8080")
conn, _ := net.ListenPacket("udp", ":0")
defer conn.Close()
var buf bytes.Buffer
encoder := gob.NewEncoder(&buf)
for n := 0; n < 10; n++ {
var msg int64 = int64(n) + 1
packet := &Packet{[]int{5}, msg}
encoder.Encode(packet)
conn.WriteTo(buf.Bytes(), dst)
}
}
Функция прослушивания:
func listen_udp() {
dst, _ := net.ResolveUDPAddr("udp", "localhost:8080")
conn, _ := net.ListenUDP("udp", dst)
defer conn.Close()
for {
buf := make([]byte, 4096)
n, _, _ := conn.ReadFromUDP(buf[:])
fmt.Println(n)
dec := gob.NewDecoder(bytes.NewReader(buf[:n]))
p := Packet{}
dec.Decode(&p)
if len(p.Parts) != 0 {
fmt.Printf("Received: %+v\n", p)
}
}
}
структура, которую я пытаюсь отправить:
type Packet struct {
Parts []int
Message int64
}