我有两个程序,一个监听器和一个拨号器。我想在同一个端口上双向UDP通信。 我的监听器按预期读取拨号器发送的数据报,然后发回5个自己的数据报。唯一的麻烦是,我的拨号器没有读它。
我尝试使用net.DialUDP但是当我使用它时,从拨号器发送0数据报。
听众 - 效果很好
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)
}
i := 0
b := make([]byte, 10)
conn.ReadFromUDP(b)
fmt.Println(string(b[:]))
for i < 5 {
conn.WriteToUDP([]byte("sending back"), &addr)
i++
}
}
发送数据报但无法读取数据报的拨号器
func main() {
sock, _ := net.Dial("udp", "127.0.0.1:7000")
buf := make([]byte, 100)
_, werr := sock.Write([]byte("first send"))
if werr != nil {
fmt.Println(werr)
}
sock.Read(buf)
fmt.Println(string(buf[:]))
}
不发送任何数据报的拨号器
func main() {
remote, _ := net.ResolveUDPAddr("udp", "127.0.0.1:7000")
sock, _ := net.DialUDP("udp", nil, remote)
buf := make([]byte, 10)
for {
sock.WriteToUDP([]byte("first send"), remote)
sock.ReadFromUDP(buf)
fmt.Println(string(buf[:]))
}
}
答案 0 :(得分:2)
如有疑问,请使用ListenUDP。它将发送和接收数据报。
sock, _ := net.Dial("udp", "127.0.0.1:7000")
这会创建一个net.Conn
,它只是一个基本的连接接口。您必须将其声明为*net.UDPConn
才能使实际的UDP
方法生效。
sock, _ := net.DialUDP("udp", nil, remote)
这会创建一个连接的&#34; UDP套接字,并使用裸Write
方法发送到单个远程地址。