我试图弄清楚如何序列化结构并通过 UDP 将其发送到我的服务器。我设法实际发送了该结构,但收到后我没有任何值......除非我静态添加一个数字。
在下面的代码中,我向端口 8080 发送了一个 UDP 数据包,其序列号只是 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
}