我正在使用 gob 从客户端发送消息以进行服务,并且这是有效的,但是当服务器响应客户端时,这不会从连接中读取。
func servidor(porta int){
var site string
addr := net.UDPAddr{
Port: porta,
IP: net.ParseIP("localhost"),
}
conn, erro := net.ListenUDP("udp", &addr)
verificaErro(erro)
enc := gob.NewEncoder(conn)
dec := gob.NewDecoder(conn)
dec.Decode(&site)
enc.Encode(site)
Run Code Online (Sandbox Code Playgroud)
}
func cliente(site string){
porta := "1200"
conn := ConnectToSocket("localhost:"+porta)
enc := gob.NewEncoder(conn)
dec := gob.NewDecoder(conn)
enc.Encode("Test")
dec.Decode(&site)
fmt.Println(site)
Run Code Online (Sandbox Code Playgroud)
}
我怎么解决这个问题?
有两个问题:
解决方法是编码到缓冲区并发送该缓冲区:
var buf Bytes.Buffer
if err := gob.NewEncoder(&buf).Encode(value); err != nil {
// handle error
}
_, err := c.WriteTo(buf.Bytes(), addr)
Run Code Online (Sandbox Code Playgroud)
接收到缓冲区并从该缓冲区解码:
buf := make([]byte, 1024)
n, addr, err := c.ReadFrom(buf)
if err != nil {
// handle error
}
if err := gob.NewDecoder(bytes.NewReader(buf[:n])).Decode(&v); err != nil {
// handle error
}
Run Code Online (Sandbox Code Playgroud)