Go ListenUDP,一条单行道?

Go ListenUDP,一条单行道?,go,udp,Go,Udp,当我运行这段代码时,一个传入的UDP数据包被读入,但是没有数据包被发回。为什么会这样?我和wireshark核实了这个事实。我希望能够通过UDP连接以两种方式进行通信,如何使用golang实现这一点 //Node 1 func main() { addr := net.UDPAddr{ Port: 7000, IP: net.ParseIP("127.0.0.1"), } conn, err := net.ListenUDP("ud

当我运行这段代码时,一个传入的UDP数据包被读入,但是没有数据包被发回。为什么会这样?我和wireshark核实了这个事实。我希望能够通过UDP连接以两种方式进行通信,如何使用golang实现这一点

//Node 1

func main() {

    addr := net.UDPAddr{
        Port: 7000,
        IP:   net.ParseIP("127.0.0.1"),
    }
    conn, err := net.ListenUDP("udp", &addr)

    defer conn.Close()
    if err != nil {
        panic(err)
    }
    for {
        b := make([]byte, 10)
        conn.Read(b)
        fmt.Println(string(b[:]))
        conn.Write([]byte("sending back"))
    }
}

func main() {
    sock, _ := net.Dial("udp", "127.0.0.1:7000")
    buf := make([]byte, 10)

    sock.Write([]byte("first send"))
    sock.Read(buf)
    fmt.Println(string(buf[:]))
}

请记住,UDP是无连接的。当你打电话给conn.Write时,你的听众不知道把数据包送到哪里。在服务器代码中,应使用和获取并指定客户端地址,如中所述:

返回的连接的ReadFrom和WriteTo方法可用于接收和发送具有每个数据包寻址的UDP数据包

修改后的Node 1循环可能如下所示:

for {
        b := make([]byte, 10)
        n, clientAddr, _ := conn.ReadFromUDP(b) // TODO: error check
        fmt.Println(string(b[:n]))
        conn.WriteToUDP([]byte("sending back"), clientAddr)
}

请记住,UDP是无连接的。当你打电话给conn.Write时,你的听众不知道把数据包送到哪里。在服务器代码中,应使用和获取并指定客户端地址,如中所述:

返回的连接的ReadFrom和WriteTo方法可用于接收和发送具有每个数据包寻址的UDP数据包

修改后的Node 1循环可能如下所示:

for {
        b := make([]byte, 10)
        n, clientAddr, _ := conn.ReadFromUDP(b) // TODO: error check
        fmt.Println(string(b[:n]))
        conn.WriteToUDP([]byte("sending back"), clientAddr)
}