Go ListenUDP,一条单行道?
当我运行这段代码时,一个传入的UDP数据包被读入,但是没有数据包被发回。为什么会这样?我和wireshark核实了这个事实。我希望能够通过UDP连接以两种方式进行通信,如何使用golang实现这一点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
//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)
}