猿问

听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("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[:]))

}


元芳怎么了
浏览 194回答 1
1回答

白衣染霜花

请记住,UDP 是无连接的。当您调用 时conn.Write,您的侦听器不知道将数据包发送到何处。在您的服务器代码中,您应该使用UDPConn.ReadFromUDP和UDPConn.WriteToUDP来获取和指定客户端地址,如文档中所述:返回连接的 ReadFrom 和 WriteTo 方法可用于接收和发送具有按数据包寻址的 UDP 数据包。您修改后的节点 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)}
随时随地看视频慕课网APP

相关分类

Go
我要回答