当我运行此代码时,传入的 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.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)
}
- 1 回答
- 0 关注
- 193 浏览
添加回答
举报
0/150
提交
取消