为了账号安全,请及时绑定邮箱和手机立即绑定

听UDP,单向街?

听UDP,单向街?

Go
元芳怎么了 2021-09-09 13:40:30
当我运行此代码时,传入的 UDP 数据包被读入,但没有数据包被发回。为什么是这样?(我用wireshark验证了这个事实)。我希望能够通过 UDP 连接以两种方式进行通信,我如何使用 golang 实现这一点?//Node 1func 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[:]))}
查看完整描述

1 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

请记住,UDP 是无连接的。当您调用 时conn.Write,您的侦听器不知道将数据包发送到何处。在您的服务器代码中,您应该使用UDPConn.ReadFromUDPUDPConn.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)

}


查看完整回答
反对 回复 2021-09-09
  • 1 回答
  • 0 关注
  • 193 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信